【发布时间】:2019-05-03 08:26:04
【问题描述】:
我正在学习如何从 this slide 更改 Javascript 中函数的上下文。这里给出的例子是完全可以理解的:
var object = {};
function fn(){
return this;
}
console.log( fn() == this) //true
console.log( fn.call(object) == object); //true
但是当我在 Node JS 中尝试这个时,结果有些不同。第一个语句导致false,第二个相等按预期工作。那么Node JS和浏览器的全局范围有什么区别吗?
我知道浏览器有名为window 的全局范围,但是Node JS 呢?导致上述不同行为的那些范围之间有什么区别?
【问题讨论】:
-
fn() == this在 Node 8.9.3 中为我评估为true(注意,最好选择严格相等而不是草率相等) -
@CertainPerformance 请参阅:tpcg.io/EJZeya。这与我的本地 Node JS 给出了相同的结果。但是在浏览器中,这两个语句的计算结果都是
true。我在 8.11.2 中的节点版本 -
啊,我是直接输入 REPL,而不是运行
.js,这一定是造成差异的原因。 -
您应该始终使用严格模式并期待
fn() == undefined。
标签: javascript node.js scope