当名称冲突时,是否可以在全局上下文中定义变量?

时间:2014-04-22 10:41:20

标签: node.js global-variables scope

如果我想在已存在具有相同名称的变量的范围内访问全局上下文中的变量define:

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

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

global对象和getting the Global object都不起作用。 (global.variable返回undefined)

2 个答案:

答案 0 :(得分:1)

如果变量真的是全局变量,即使存在与局部变量的冲突,也可以通过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将打印undefined 。)

答案 1 :(得分:-2)

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

var var1 = 'Hello World!';

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

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

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