Node.js中全局变量的异常表现:未加global为何可访问?
Node.js中未加global前缀访问全局变量的原理
你的猜想完全正确,这就是JavaScript作用域链的查找机制在Node.js环境下的体现,具体逻辑如下:
作用域链查找规则
- 当你在
testFunc2里直接访问context时,JavaScript引擎会先在当前函数的局部作用域里查找有没有声明过这个变量——显然这里没有,于是继续向上查找。 - 因为
testFunc2是箭头函数,它的作用域继承自定义它的外部作用域(也就是TestFunction.js的模块作用域),这个模块里也没声明context,所以继续往上走。 - 最后走到Node.js的全局作用域,这里的全局作用域以
global对象为载体,global上的所有属性都会被当作全局变量,可以直接通过变量名访问。你之前在home函数里给global.context赋值,相当于把context挂载到了全局作用域,所以引擎在这里找到了对应的变量。
- 当你在
补充说明
Node.js的每个模块都有独立的模块作用域,模块内的变量默认不会自动挂到global上,但如果主动给global的属性赋值,这个变量就会变成全局可访问的,不需要加global前缀就能直接调用。
内容的提问来源于stack exchange,提问作者NodeFriend
相关产品推荐
相关产品推荐

