suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Javascript – JS-Aufrufausführungsprozess

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

迷茫迷茫2797 Tage vor586

Antworte allen(5)Ich werde antworten

  • 習慣沉默

    習慣沉默2017-05-19 10:39:03

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

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

    代码的执行顺序可以 debug 一下

    Antwort
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-19 10:39:03

    iterator.call(context.....
    相当于给iterator函数this绑定为context

    Antwort
    0
  • 漂亮男人

    漂亮男人2017-05-19 10:39:03

    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 指针的绑定。

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-05-19 10:39:03

    用于指定函数的执行环境

    Antwort
    0
  • 阿神

    阿神2017-05-19 10:39:03

    call让指定函数的this指向相应的对象。
    上面的例子:
    iterator.call(context,obj[i],i)//this指向context,obj[i],i为参数

    建议看下,方便理解上面的代码http://www.liaoxuefeng.com/wi...

    Antwort
    0
  • StornierenAntwort