var length = 20;
function fn(){
console.log(this.length);
}
var obj = {
length : 10,
api : function(fn){
fn();
arguments[0]();
}
}
obj.api(fn,2)
为何fn()输出的是20,argument[0]()输出的是2;
fn()的当前上下文不是obj.api吗?
var length = 20;
function fn(){
console.log(this.length);
}
var obj = {
length : 10,
api : function(fn){
fn();
arguments[0]();
}
}
obj.api(fn,2)
为何fn()输出的是20,argument[0]()输出的是2;
fn()的当前上下文不是obj.api吗?
通常来说,以 A.B() 或 A[B]() 的方式调用 B ,那么在 B 函数中, this 是 A。
以 B() 的方式调用,严格模式下没有 this 。非严格模式下 this 是全局环境。
到你这里,子啊 obj.api() 的函数体里, this 是 obj 。但是,由于通过 fn() 的方式调用 fn() ,在该次调用中, fn 中 this 是全局环境,输出全局变量 length ,也就是 20。
通过 arguments[0]() 的方式调用 fn() ,fn 中 this 是 arguments , fn() 中的 this.length 是 arguments.length ,也就是 2。
fn 的两次执行 this 都不是 obj,更不可能是你说的 obj.api
,具体自己去百度 javascript this 的指向
fn()
属于函数的直接调用这种情况。arguments[0]()
属于调用 arguments{0: fn, 1: 2}
的方法,this 为 arguments。
js中的this指向一开始确实不好理解, 有点儿耐心, 慢慢就理解了。 其实这个题记住两点就行了
其实js里this的指向也就4到5种 记熟它就可以了 这是我以前写的博客 你可以看看
https://blog.csdn.net/QingWaX...
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
fn()
其实是等于window.fn()
的,arguments 此时是一个对象了{0 : fn,1:2}