【发布时间】:2019-09-24 06:02:02
【问题描述】:
var f = function() {
this.x = 5;
(function() {
this.x = 3;
})();
console.log(this.x);
};
f.call(f);
f();
f.call();
运行var f 作为f.call(f) 输出5。当以f() 或f.call() 运行时,输出3。
每种情况会发生什么?内部函数的this是指什么?
【问题讨论】:
-
不要混淆这两个引用。而是尝试查看有两个不同的堆栈帧。每个帧都有一个 this 引用。这要么是默认值,要么是由 call() 设置的。无法设置内部函数。它始终是默认值。我认为这是默认的窗口,但这取决于是否有模块加载器。我应该知道,但我不记得了。
-
如果你想添加一些其他的作用域/上下文,使用
.bind(context)方法。 -
这就是为什么你总是应该使用严格模式...
-
这也是为什么你应该使用 lambdas 而不是匿名函数
标签: javascript this