js回调this问题
两个调用 第二次进行回调的时候 this 标记1和 this 标记2值不一样
这是为何?
function a (val, callback) {
callback.call(a,val,callback)
}
a(1,function b (val ,callback) {
console.log(this, '标记1')
console.log(val)
console.log(callback)
callback(2,function c(val, callback){
console.log(this)
console.log(val)
console.log(callback)
console.log('over')
})
})
console.log('-----分割线-------')
a(1,function b () {
console.log(this, '标记2')
console.log(arguments[0])
console.log(arguments[1])
arguments[1](2,function c(){
console.log(this)
console.log(arguments[0])
console.log(arguments[1])
console.log('over')
})
})
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
第一步,先看函数a定义
观察callback,上图中一共有三个callback,分别是
第二步,简化你的试验代码,突出this
第三步, 分析分割线上半部分执行结果
进一步简化,上面代码实际是
a(1, b)
, 结合第一步的图,b第一次执行时,对应第一步图中2号callback,
"a 标记10的this“
b第二次执行时b(2,c),并未绑定任何对象,默认在window上执行,故this是window
"window 标记10的this"
”window 标记11的this“
第四步, 分析分割线下半部分执行结果
进一步简化,上面代码实际是
a(1, b)
, 结合第一步的图,b第一次执行时,对应第一步图中2号callback,
"a 标记20的this“
b第二次执行时arguments.b(2,c) (注意,只是为了好理解,实际是arguments[1]代b执行。),绑定在arguments对象上执行b,故this是arguments
"arguments 标记20的this"
”arguments 标记21的this“
翻译一下你的代码,说实话,你这命名不改一下真是谁都看不懂。
抱歉看不下去, 只看了前面两位的答案,大概就是这样了。