javascript - js的call的執行過程
迷茫
迷茫 2017-05-19 10:37:03
0
5
572
window._ = {
    VARSION:"0.1.0",
    each:function(obj,iterator,context){
        var index = 0;
        try{
            if(obj.forEach){
                obj.forEach(iterator,context);
            }else if(obj.length){
                for( var i= 0; i<obj.length; i++){
                    iterator.call(context,obj[i],i);
                }
            }else if(obj.each){
                obj.each(function(value){
                    iterator.call(context,value,index++)
                });
            }else{
                var i = 0;
                for(var key in obj){
                    var value = obj[key],
                        pair = [key,value];
                    pair.key = key;
                    pair.value = value;
                    iterator.call(context,pair,i++);
                }
            }
        }catch(e){
            console.log(e)
            // if(e != "__break__") throw e;
        }
        return obj;
    }
}
var arr = {
    a:5,
    b:6,
    c:4
}
_.each(arr,function(a,b){
    console.log(a)
    console.log(b)
})

網速原因 不能上傳img 抱歉
我想知道 那個call的作用具體在這段程式碼的意思是怎麼樣的
執行的流程是什麼樣的 謝謝各位

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(5)
習慣沉默

call 是为了给你保证你提供了第三个参数的时候 callback 的作用域不受污染.

_.each(arr, function (a, b) {
    console.log(this); //window
})

_.each(arr, function (a, b) {
    console.log(this); // arr
},arr)

程式碼的執行順序可以 debug 一下

伊谢尔伦

iterator.call(context.....
相當於給iterator函數this綁定為context

漂亮男人

iterator.call() 中,iterator 是傳入的遍歷函數,具體到本例中,就是指匿名函數:

function(a, b) { console.log(a); console.log(b); }

因此,call 指的是 Function.prototype.call 。詳見Function.prototype.call() - JavaScript | MDN

Function.prototype.call 的簽名格式是:

func.call(thisArg, param1, param2, ...)

thisArg 用來改變函數內部 this 指標的綁定。

巴扎黑

用於指定函數的執行環境

阿神

call讓指定函數的this指向對應的物件。
上面的範例:
iterator.call(context,obj[i],i)//this指向context,obj[i],i為參數

建議看下,方便理解上面的程式碼http://www.liaoxuefeng.com/wi...

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