2013-02-21 20 views
3

我想全局访问局部变量(不更改变量的名称空间或位置)。我read,我可以使用,但它不工作“窗口”:使用“窗口”与本地变量在JavaScript中进行全局访问

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

alert(window.localVar); // not working 

fiddle

像这样的工作?

此外,我已阅读有关全局变量的风险。如果我几乎可以肯定一个变量的名字没有被重用的风险,它是否安全?

$myTotallyUniqueVarName 
+0

*“但它不工作:” * ...好,使用'window.lovalVar'是在这个位置语法错误:'但它不工作:'语法错误:意外的令牌.'。 – 2013-02-21 15:04:23

回答

4
var myNameSpace = { }; 

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

从另一个对象定义关键时,像你试过,你不能访问另一个对象。但是你肯定可以创建多个引用/赋值给相同的值,如上所示。

但是,要知道,我们在这种情况下分配原始值,这意味着,window.localVarmyNameSpace.localVar将举行自己的独特价值。任何改变将不是反映在另一边。

1

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

function a() { 
bvar = 3; // accessable 
var cvar = 4; // inaccessable 
} 

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 
+0

谢谢,这很有帮助。所以bvar是可访问的,因为它是一个关键,或者因为它不是一个变量? – nathanbweb 2013-02-21 14:40:33

+1

在JavaScript中,一切都可以看作是一个数组。所以,一个函数是一个具有属性的数组,而全局对象可以被看作是一个数组。函数a()和bvar都是全局对象上的'items'/属性。 (每个声明没有var前缀的变量都会泄漏到全局对象中)。因此,window.a和window.bvar是可访问的。 cvar在函数内部声明并成为函数“激活对象”的属性。功能激活对象的属性在功能范围外是不可访问的。希望这有助于,这里的空间很小。 – Andries 2013-02-21 14:58:18

+0

我看,谢谢 – nathanbweb 2013-02-21 15:00:43