Pro*_*gni 2 javascript this global-scope node.js
我在本地安装了Node.js v8.10.0.我写了一个简单的脚本来玩'this':
var x = 1;
var fn = function (a) {
var x = a;
console.log(`local x = ${x}`);
console.log(`global x = ${this.x}`);
}
fn(10);
Run Code Online (Sandbox Code Playgroud)
当我通过Node.js执行脚本时,我得到以下结果:
local x = 10
global x = undefined
Run Code Online (Sandbox Code Playgroud)
当我在Chrome中执行脚本时,我得到以下结果:
local x = 10
global x = 1
Run Code Online (Sandbox Code Playgroud)
您能否向我解释一下,为什么Node.js在全局范围内没有看到x?
您能否向我解释一下,为什么Node.js在全局范围内没有看到x?
如果您在Node控制台中运行它,它会.如果您将其作为文件运行,x则位于文件的范围内,而不是全局范围.
顺便说一句,在Node中,您可以使用global显式查看全局范围,就像您window在浏览器中使用一样.从而,
console.log(global == this)
Run Code Online (Sandbox Code Playgroud)
将根据您是在文件中还是在控制台中运行它来给出两个不同的答案.
此外,尝试迁移到let和const.这更令人困惑,因为var在全球范围和其他地方表现不同.在控制台和浏览器中,您的外部var x位于全局范围内,因此它定义了一个全局变量(window.x和global.x).在Node文件中,var x不在全局范围内,因此它在不在全局范围内时执行通常所做的操作:定义局部变量x(不是this.x,不是global.x,只是x).因此,您有两个局部变量,内部变量遮蔽外部变量,这使得外部变量不可访问.同时,this.x从未定义过.
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |