javascript - call的疑問
PHP中文网
PHP中文网 2017-05-19 10:44:24
0
2
727

《JavaScript權威指南》上有一段用來實作Array.prototype.map的函數:

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中文网
PHP中文网

认证高级PHP讲师

全部回覆(2)
洪涛

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

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

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

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

總之,一句話為了完全模擬map函數的性質~

滿天的星座

/q/10...

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板