Sekiranya seseorang mengelak mengisytiharkan fungsi dalam fungsi (kecuali penutupan yang disengajakan)?
迷茫
迷茫 2017-05-19 10:23:40
0
3
554
$('.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? ~

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(3)
过去多啦不再A梦

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.

世界只因有你
function test(message) {
  console.log(message);
}

$('.dom').on('click', function () {
  test('abc')
});

Ujian dibuang selepas digunakan, ia tidak akan dikitar semula.

为情所困

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan