javascript - js的call的执行过程

查看:72
本文介绍了javascript - js的call的执行过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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的作用具体在这段代码的意思是怎么样的
执行的流程是什么样的 谢谢各位

解决方案

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

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

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

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

这篇关于javascript - js的call的执行过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆