两个调用 第二次进行回调的时候 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')
})
})
第一步,先看函数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“