Bir zamanlar olay işleyici

Hızlı soru: addEventListener()?

addEventListener() adlı kişinin sadece iki sürdüğünü düşünüyorsanız utanmayın parametrelerini veya her zaman belirsiz bir false değeri alakalı olup olmadığını nasıl anlarsınız?

Daha yapılandırılabilir bir addEventListener()

addEventListener() yöntemi, ilk ortaya çıktığından beri çok yol katetti çalışmasıdır ve yeni işlevi, bu aracın sunduğu üçüncü parametre. Yöntemin tanımında yapılan son değişiklikler, geliştiricilerin bir yapılandırma nesnesi aracılığıyla ek seçenekler sağlamasına bir boole parametresi olduğunda veya bir boole parametresi olduğunda seçeneği belirtilmemiş.

Chrome 55'in once seçeneği için destek eklediğini duyurmaktan mutluluk duyuyoruz. passive (Chrome 51'de uygulanır) ile birlikte bu yapılandırma nesnesini ve capture seçenekleri (Chrome 49'da uygulanır). Örneğin:

element.addEventListener('click', myClickHandler, {
    once: true,
    passive: true,
    capture: true
});

Bu seçenekleri kendi kullanım alanınıza uygun şekilde birlikte kullanabilirsiniz.

Sonra da temizlik yapmanın faydaları

Yeni once seçeneğini kullanmak için söz dizimi bu şekildedir, ancak bu sen? Kısacası, size "tek ve bitmiş" için özel olarak tasarlanmış bir etkinlik işleyici sunar. örnekler üzerinden görüntüleyebilirsiniz.

Etkinlik işleyiciler varsayılan olarak ilk çağrılmalarından sonra da devam eder. Bu işlem, bazı etkinlik türlerinde istediğiniz şeydir. Birden fazla tıklanabilen düğmeler sağlayabilir. Diğer kullanım alanları için, bir etkinlik işleyici çubuğu gereksizdir ve istenmeyen davranışlara neden olursa yalnızca bir kez yürütülmesi gereken geri çağırmayı içerir. Hijyenik geliştiriciler her zaman öğeleri açıkça temizlemek için removeEventListener() kullanma seçeneği, şunun gibi kalıplar vardır:

element.addEventListener('click', function cb(event) {
    // ...one-time handling of the click event...
    event.currentTarget.removeEventListener(event.type, cb);
});

Yeni once parametresinden yararlanılarak eşdeğer kod daha temizdir ve etkinlik adını (event.type, önceki örnekte) veya geri çağırma işlevine (cb) bir referans:

element.addEventListener('click', function(event) {
    // ...one-time handling of the click event...
}, {once: true});

Etkinlik işleyicilerinizi temizlemek, verileri yok ederek bellek verimliliği de sağlayabilir. geri çağırma işleviyle ilişkilendirilmiş kapsamı kullanarak kapsayıcıların çöp toplamasına izin vermez. Burada, dönüşüm hunisinin üst kısmındaki fark:

function setUpListeners() {
    var data = ['one', 'two', '...etc.'];

    window.addEventListener('load', function() {
    doSomethingWithSomeData(data);
    // data is now part of the callback's scope.
    });
}

Varsayılan olarak, load etkinlik işleyici geri çağırması çalışmasını bitirebilir. Çünkü data değişkeni geri çağırma içinde kullanılırsa kapsam dahilinde kalır ve hiçbir zaman toplanıyor. Fakat geri çağırma once parametresi aracılığıyla kaldırıldıysa hem işlevin kendisi ve kapsamı üzerinden canlı tutulan her şey, atık toplamaya aday olabilir.

Tarayıcı desteği

Chrome 55+, Firefox 50+ ve Safari'nin teknoloji önizlemesi 7+ için yerel desteğe sahip olma once seçeneği.

Birçok JavaScript kullanıcı arayüzü kitaplığı, etkinlik oluşturmak için kolaylık yöntemleri sunar işleyicileridir, bazıları ise tek seferlik etkinlikleri tanımlarken kullanılan kısayollar içerir. Bunlardan biri, jQuery'nin one() yöntemidir. Çoklu dolgu Ayrıca Andrea Giammarchi'nin dom4 kitaplığı.

Teşekkürler

Ingvar Stepanyan'a şu konuyla ilgili geri bildirim verin: örnek koda değineceğiz.