当我在 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
是当前module的本地。您应该直接引用它:console.log(testContext);
.
当你不输入时var
,发生的事情是testContext
现在整个 Node 进程中的一个全局变量。
在 Chrome(或任何其他浏览器 - 好吧,我不确定 oldIE ...)中,无论您var
在示例中是否使用,testContext
都将转到全局上下文,即window
.
顺便说一下,“全局上下文”是this
JS 中函数调用的默认值。
关键区别在于 Node.js 中的所有module(脚本文件)都在自己的闭包中执行,而 Chrome 和其他浏览器直接在全局范围内执行所有脚本文件。
Globals 文档中提到了这一点:
其中一些对象实际上并不在全局范围内,而是在module范围内 - 这将被指出。
var
您在 Node module中声明的s 将与这些闭包之一隔离,这就是为什么您必须导出其他module的成员才能访问它们。
但是,在function
没有特定上下文的情况下调用 a 时,它通常会默认为全局对象——global
在 Node.js 中可以方便地调用它。
function testFunction() {
return this;
}
console.log(testFunction() === global); // true
并且,如果没有var
声明它,testContext
将默认定义为全局.
testContext = 15;
console.log(global.testContext); // 15
如文档中所述
Node.js module中的 var 某些内容将是该module的本地内容。
因此,它会有所不同,因为var testContext
is 在module上下文中,而 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();