国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

javascript - call的疑問
PHP中文網(wǎng)
PHP中文網(wǎng) 2017-05-19 10:44:24
0
2
811

《JavaScript權(quán)威指南》上有一段用來實(shí)作Array.prototype.map的函數(shù):

var map = function(a,f){
    var results = [];
    for(var i = 0,l = a.length; i<l; i++){
        if(i in a){
            results[i] = f.call(null,a[i],i,a);//這里
        }
    }
    return results;
};

為什麼要用call(null)而不是直接用f(a[i], i, a)?這樣this都是指向全域啊

PHP中文網(wǎng)
PHP中文網(wǎng)

認(rèn)證高級PHP講師

全部回覆(2)
洪濤

你可以看到,在這裡實(shí)現(xiàn)的map是這種形式的, 即 map(array, f),也就是只能用兩個參數(shù)來調(diào)用,
我們再看一下MDN上給出的函數(shù)原型,

const new_array = arr.map(callback[, thisArg])

callback也就是我們所說的f,那麼最後一個this是可選的,而書上提供的函數(shù)根本就沒有考慮這個值,那麼當(dāng)不傳這個值的時候,如果省略了thisArg 參數(shù),或者賦值為null 或undefined,則this 指向全域物件。
此外,我們已知在使用函數(shù)物件call方法時,

如果這個函數(shù)處於非嚴(yán)格模式下,則指定為null和undefined的this值會自動指向全域物件(瀏覽器中就是window物件),同時值為原始值(數(shù)字,字串,布林值)的this會指向該原始值的自動包裝物件。

總之,一句話為了完全模擬map函數(shù)的性質(zhì)~

滿天的星座

/q/10...

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板