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
call
是为了给你保证你提供了第三个参数的时候callback
的作用域不受污染.代码的执行顺序可以 debug 一下
iterator.call(context.....
相当于给iterator函数this绑定为context
iterator.call()
中,iterator
是传入的遍历函数,具体到本例中,就是指匿名函数:因此,call 指的是
Function.prototype.call
。具体参见Function.prototype.call() - JavaScript | MDNFunction.prototype.call
的签名格式是:thisArg 用来改变函数内部
this
指针的绑定。用于指定函数的执行环境
call让指定函数的this指向相应的对象。
上面的例子:
iterator.call(context,obj[i],i)//this指向context,obj[i],i为参数
建议看下,方便理解上面的代码http://www.liaoxuefeng.com/wi...