var arr=[2,3,42,1,4,6];var arr2=arr.map(function(data,index,_this){ console.log(this);//为什么是window return data;},this);//这里的this指向谁
1 回答

桃花长相依
TA贡献1860条经验 获得超8个赞
是调用cb时候的this,对于这种情况下,就是全局对象了,strict模式下好像是undefined吧,如果你传入一个bind以后的cb,这个this应该就是bind调用是传入的上下文了,比如:
var obj = {}var arr = [12,123]var cb = (function(){console.log(this)}).bind(obj)var arr2 = arr.map(cb)
楼主可以试一试,如果不明白的话,好好看一下js中this值的变化吧!推荐一本you dont konw js,我觉得是我看过的js语法讲的最好的书了
不好意思没看太清,楼主问的是传入的this,这个其实就是代替我了上边的那个bind调用,因为一个函数在类似cb这种情况下调用,很多时候this都是指向全局的(例外的有事件处理函数),如果你传入第二个this参数,那么,你的cb中的this就指向了第二个参数,其实就是和传入一个bind之后的函数一个作用。
添加回答
举报
0/150
提交
取消