4

我想全局访问一个局部变量(不更改变量的命名空间或位置)。我读到我可以使用“窗口。”,但它不起作用:

var myNameSpace = {
        window.localVar : 'foo'
    };

alert(window.localVar);  // Not working

JSFiddle

像这样的东西可以工作吗?

另外,我读过关于全局变量的风险。如果我几乎可以肯定变量的名称没有被重用的风险,它安全吗?

$myTotallyUniqueVarName
4

2 回答 2

4
var myNameSpace = { };

myNameSpace.localVar = window.localVar = 'foo';

从另一个对象定义密钥时,您无法访问另一个对象,就像您尝试过的那样。但是您当然可以为同一个值创建多个引用/分配,如上所示。

但是,请注意,在这种情况下,我们分配了一个原始值,这意味着window.localVar并且myNameSpace.localVar将拥有它们自己的唯一值。任何改变都不会反映在另一面。

于 2013-02-21T14:31:13.763 回答
1

每个与全局对象相关的变量都可以全局访问。在浏览器中,window 变量代表全局对象。

function a() {
  bvar = 3; // Accessible
  var cvar = 4; // Inaccessible
}

a();

alert(window.bvar === 3); // true
alert(window.cvar === 4); // false, cvar is undefined

// This refers here to the global object
alert(window.bvar === this.bvar); // true
于 2013-02-21T14:38:12.840 回答