cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Soalan tentang kaedah penulisan yang serasi bagi addEventListener dan attachEvent, sila bantu!

Cara penulisan pertama

里面的if分支只会执行一次,返回的函数里面已经不包含浏览器判断了,所以相对于常规写法,已经很棒了
var addEvent = (function(){
    if(window.addEventListener){
        return function(elem, type, handler){
            elem.addEventListener(type, handler, false);
        };
    }else if(window.attachEvent){
        return function(elem, type, handler){
            elem.attachEvent('on' + type, handler)
        };
    }
})();

Cara penulisan kedua

在第一次进入if判断后,重写了addEvent函数,这样后续的addEvent也不包含分支判断语句了,感觉跟第一种写法并没有多大的区别,但是第二种写法被称为惰性载入函数,可是我并没有感觉他比第一种方式惰在哪里啊?相较来说,我更喜欢第一种方式,求解释
var addEvent = function(elem, type, handler){
    if(window.addEventListener){
        addEvent = function(elem, type, handler){
            elem.addEventListener(type, handler, false);
        };
    }else if(window.attachEvent){
        addEvent = function(elem, type, handler){
            elem.attachEvent('on' + type, handler);
        };
    }

    addEvent(elem, type, handler);
};

Itu sangat jelas, terima kasih!

Samhanx

PHPzPHPz2755 hari yang lalu734

membalas semua(3)saya akan balas

  • 给我你的怀抱

    给我你的怀抱2017-05-16 13:41:30

    Beri perhatian kepada IIFE dengan cara pertama menulis, supaya apabila kod dilaksanakan dan fungsi addEvent ditetapkan, ia akan menjadi jelas sama ada addEvent ialah fungsi yang dikembalikan oleh if atau else if.

    Dalam cara penulisan kedua, addEvent masih merupakan fungsi paling luar semasa melaksanakan kod Apabila anda benar-benar memanggil addEvent(), anda menetapkan semula nilai secara dalaman untuk menjelaskan apa itu addEvent, dan kemudian memanggil dirinya dalam fungsi pembohongan.

    Perhatikan bahawa terdapat proses lulus untuk parameter perantaraan, dan jika ia tidak dipanggil, rujukan kepada fungsi luar akan sentiasa disimpan pada addEvent Selepas fungsi pelaksanaan segera kaedah penulisan pertama dilaksanakan, memori yang diduduki oleh. fungsi tanpa nama akan Mula menunggu untuk kitar semula.

    balas
    0
  • 黄舟

    黄舟2017-05-16 13:41:30

    Saya faham bahawa kaedah kedua dipanggil fungsi pemuatan malas, yang relatif kepada kaedah pertama:
    1) Kaedah pertama, kerana ia adalah IIFE, tidak kira sama ada addEvent dipanggil atau tidak Telah disahkan bahawa penyemak imbas menyokong addEventListener atau attachEvent addEvent, 都已经确认了浏览器支持的是addEventListener ,还是attachEvent
    2) 第二种方法,则是在显式调用addEvent 2) Kaedah kedua ialah apabila secara eksplisit memanggil addEvent Untuk mengetahui status sokongan penyemak imbas; .

    balas
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:41:30

    Dalam kaedah kedua, addEvent telah ditetapkan semula selepas panggilan pertama, dan tidak perlu melakukan pertimbangan cawangan pada panggilan kedua

    balas
    0
  • Batalbalas