Rumah > Soal Jawab > teks badan
$('.dom').on('click', function () {
function test() {
console.log('abc');
}
});
Ujian fungsi diisytiharkan setiap kali ia diklik, dan kemudian panggil balik klik dilaksanakan dan GCed Jika dom diklik lebih daripada sekali, maka setiap panggilan balik klik akan mempunyai satu lagi pengisytiharan fungsi benarkan pengisytiharan fungsi ditulis bukankah keadaan semasa dalam gelung serupa? Jadi apakah cara terbaik untuk menanganinya? Sekiranya saya mengalihkan kedudukan pengisytiharan fungsi ujian ke luar Ini akan menyebabkan penutupan dan fungsi ujian tidak boleh dikitar semula Jika pengguna hanya menggunakan logik ini, ia akan menjadi kerugian. Apa yang perlu saya lakukan? ~
过去多啦不再A梦2017-05-19 10:25:40
Terdapat perbezaan antara gelung dan fungsi.
Gelung bukan skop bebas, jadi pengisytiharan fungsi di dalamnya akan diisytiharkan terlebih dahulu, tetapi tidak dalam fungsi. jshint menghalang definisi pendua.
function a() {
function b() {
}
}
b hanya akan diisytiharkan apabila fungsi a dilaksanakan, dan jika tiada rujukan luaran yang menunjuk kepada b, ia akan dimusnahkan selepas fungsi itu melaksanakan pusingan kitar semula seterusnya.
Malah tidak banyak bezanya.
世界只因有你2017-05-19 10:25:40
function test(message) {
console.log(message);
}
$('.dom').on('click', function () {
test('abc')
});
Ujian dibuang selepas digunakan, ia tidak akan dikitar semula.
为情所困2017-05-19 10:25:40
Jika dilaksanakan sekali sahaja, boleh jadi begini:
var elem = $('.dom');
elem.on('click', (function() {
return function foo(e) {
// do something...
elem.off('click', foo);
};
}()));
Fo yang ditakrifkan tidak akan menjejaskan dunia luar, nyahpasangnya serta-merta selepas digunakan dan tunggu untuk dikitar semula
Bersih, menyembunyikan merit dan kemasyhuran