如何在局部作用域中引用全局作用域变量?

4
var b=1;

function someFunc(b) {
     //here 
}

我希望能够引用在函数外定义的变量b。在JavaScript中应该如何实现?
1个回答

8

您需要通过全局对象进行访问,这在浏览器中是window,在node.js中是global

var b=1;

function someFunc(b) {
    alert( window.b ); // or console.log( global.b );
}

为什么呢?因为所谓的“激活对象”(在ES3中)或“词法环境记录”(ES5中)将重叠变量名b。所以任何时候JS引擎解析b,它会停在第一次出现的地方,也就是在它自己的作用域中。

在非DOM环境(如node.js)中,全局对象是什么? - Raj
在Node.js中,global并不是真正的全局对象! - Niko
1
@RajSekharan 虽然 global.b 是一种可行的方式,但为什么不改变变量名呢?我使用 _b 表示私有于模块的变量。 - Joseph Yaduvanshi
是的,使用适当的命名约定似乎是合适的方式。需要更好地理解正确解析范围的相关知识。 - Raj
1
@Niko:在Node.js中,“global”和“GLOBAL”都引用了全局对象,即引用“变量对象”。 - jAndy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接