javascript - Soalan tentang kaedah penulisan yang serasi bagi addEventListener dan attachEvent, sila bantu!
PHPz
PHPz 2017-05-16 13:39:30
0
3
732

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

PHPz
PHPz

学习是最好的投资!

membalas semua(3)
给我你的怀抱

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.

黄舟

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; .

漂亮男人

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

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