当发生名称冲突时,是否可以访问全局上下文中定义的变量?



如果我想从已经存在同名变量的范围内访问全局上下文中定义的变量:

var variable = 'value';
function someScope(variable){
    variable = 'not this';
    var global = Function('return this')();
    console.log('this > ', global.variable);
}

是否仍然可以以某种方式访问全局变量?

global对象和获取Global对象都不起作用。(global.variable返回未定义)

如果变量真的是全局的,即使与局部变量发生冲突,也可以通过global.name访问它。例如

// notice there is not "var" here
variable = 'global';
function someScope() {
    var variable = 'local';
    console.log(variable);            // local
    console.log(global.variable);     // global
}
someScope();

然而,如果你在文件顶部用"var"定义变量(正如你在代码中所做的那样),那么它将不是全局的,你会得到不同的结果(即global.variable将打印未定义的。)

您可以通过window对象访问全局JS变量,因为每个全局变量都是窗口对象的一个属性:

var var1 = 'Hello World!';
// stated on the global scope, is the same as
window.var1 = 'Hello World!';

您也可以在函数范围内读取这些全局变量:

function() {
    console.log( window.var1 );
}

相关内容

  • 没有找到相关文章

最新更新