var foo = {
bar:function(){
console.log(this);
}
}
foo.bar();
(foo.bar)();
(foo.bar = foo.bar)();//window
(foo.bar,foo.bar)();//window
(false || foo.bar)();//window
谁帮忙解释下后三个为什么呀???
var foo = {
bar:function(){
console.log(this);
}
}
foo.bar();
(foo.bar)();
(foo.bar = foo.bar)();//window
(foo.bar,foo.bar)();//window
(false || foo.bar)();//window
谁帮忙解释下后三个为什么呀???
(foo.bar)();
此时foo.bar作为变量,还没有作为语句被计算过,还未丢失foo,调用的时候等同foo.bar().
(foo.bar = foo.bar)();//window
foo.bar = foo.bar是一个语句,调用时执行该语句返回一个function,已丢失foo,又因为全局调用,所以this被赋值为当前全局对象。
(foo.bar,foo.bar)();//window
同上,作为语句被执行
(false || foo.bar)();//window
同上
简单来讲后三个函数调用左边不是内部引用类型,所以函数调用确定的 this 是 undefined,在非严格模式下内部会设置为 全局对象。具体看这篇博客 https://m2mbob.cn/2016/09/25/...
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
这问题很有意思!
原因是没有直接使用 foo 做为context
所以很多时候我们都是