IGR*_*ACH 37 javascript scope node.js
当我在node.js中键入它时,我得到了undefined.
var testContext = 15;
function testFunction() {
console.log(this.testContext);
}
testFunction();
=>undefined
Run Code Online (Sandbox Code Playgroud)
没有var关键字,它传递(=> 15).它在Chrome控制台中运行(有和没有var关键字).
gus*_*nke 49
使用时它在Node中不起作用,var因为它testContext是当前模块的本地.你应该直接引用它:console.log(testContext);.
当您不键入时var,会发生什么testContext现在是整个Node进程中的全局变量.
在Chrome(或任何其他浏览器 - 好吧,我不确定oldIE ...)中,如果你var在你的例子中使用或不使用,那么testContext 将转到全局上下文,这是window.
顺便说一句,"全局上下文"是thisJS中函数调用的默认值.
Jon*_*ski 17
关键的区别在于Node.js中的所有模块(脚本文件)都在它们自己的闭包中执行,而Chrome和其他浏览器直接在全局范围内执行所有脚本文件.
这在Globals文档中提到:
其中一些对象实际上并不在全局范围内,而是在模块范围内 - 这将被注意到.
在var您节点模块中声明旨意被隔离到这些盖子的一个,这就是为什么你必须输出部件其他模块,以达到他们.
虽然,在function没有特定上下文的情况下调用a时,它通常会默认为全局对象 - global在Node中可以方便地调用它.
function testFunction() {
return this;
}
console.log(testFunction() === global); // true
Run Code Online (Sandbox Code Playgroud)
并且,如果没有var声明它,testContext将默认定义为全局.
testContext = 15;
console.log(global.testContext); // 15
Run Code Online (Sandbox Code Playgroud)
如文档中所述
Node.js 模块中的 var 某些内容将是该模块的本地内容。
因此,它会有所不同,因为var testContextis 在模块上下文中,而 this 的上下文是global。
您也可以使用:
global.testContext = 15;
function testFunction() {
console.log(this.testContext);
}
testFunction();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67537 次 |
| 最近记录: |