Javascript – JS-Aufrufausführungsprozess
迷茫
迷茫 2017-05-19 10:37:03
0
5
569
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 kann aufgrund der Netzwerkgeschwindigkeit nicht hochgeladen werden.
Ich möchte wissen, welche spezifische Funktion dieser Aufruf in diesem Code hat.
Wie ist der Ausführungsprozess? Vielen Dank an alle

迷茫
迷茫

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

Antworte allen(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...

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage