当我在 node.js 中输入这个时,我得到undefined
.
var testContext = 15;
function testFunction() {
console.log(this.testContext);
}
testFunction();
=>undefined
没有var
关键字,它通过 (=>15)。它在 Chrome 控制台中运行(带和不带var
关键字)。
当我在 node.js 中输入这个时,我得到undefined
.
var testContext = 15;
function testFunction() {
console.log(this.testContext);
}
testFunction();
=>undefined
没有var
关键字,它通过 (=>15)。它在 Chrome 控制台中运行(带和不带var
关键字)。
使用时它在 Node 中不起作用,var
因为testContext
它是当前模块的本地。您应该直接引用它:console.log(testContext);
.
当您不键入var
时,会发生什么testContext
现在是整个 Node 进程中的全局变量。
在 Chrome(或任何其他浏览器 - 好吧,我不确定 oldIE ...)中,无论您是否var
在示例中使用,testContext
都将转到全局上下文,即window
.
顺便说一句,“全局上下文”是this
JS 中函数调用的默认设置。
主要区别在于 Node.js 中的所有模块(脚本文件)都在它们自己的闭包中执行,而 Chrome 和其他浏览器则直接在全局范围内执行所有脚本文件。
Globals 文档中提到了这一点:
其中一些对象实际上不在全局范围内,而是在模块范围内——这将被记录下来。
您在 Node 模块中声明的var
s 将与这些闭包之一隔离,这就是您必须导出成员以供其他模块访问它们的原因。
function
但是,在没有特定上下文的情况下调用 a 时,它通常会默认为全局对象——在 Node.js 中很方便地调用global
它。
function testFunction() {
return this;
}
console.log(testFunction() === global); // true
并且,如果没有var
声明它,testContext
将默认被定义为 global。
testContext = 15;
console.log(global.testContext); // 15
var Node.js 模块中的某些内容将是该模块的本地内容。
因此,它会有所不同,因为var testContext
is 在模块上下文中,而 this 的上下文是global
.
您也可以使用:
global.testContext = 15;
function testFunction() {
console.log(this.testContext);
}
testFunction();
我认为问题与this
关键字有关。如果你这样做console.log(this)
,你会看到 testContext 没有定义。您可能想尝试:
this.testContext = 15;
function testFunction() {
console.log(this.testContext);
}
testFunction();