javascript:将全局var传递给函数

时间:2012-02-25 22:30:27

标签: javascript

我有一个全局变量MyGlobalVar和一些看起来像这样的代码:

var MyGlobalVar = null;

function PlayWithMyGlobal() {
    MyGlobalVar = new Object();
    .... adding properties to MyGlobalVar
    MoreFun(MyGlobal);
}

function MoreFun(TheVar) {
    is TheVar here a local or just a reference to the global?
} 

如果我传递全局变量,我还在使用全局吗? 感谢。

3 个答案:

答案 0 :(得分:5)

  

如果我传递全局变量,我还在使用全局吗?   感谢。

这取决于您传递的变量是 对象 还是 原语 number,首先是stringbooleanundefinednull是原始值。对象通过引用和基元按值传递。

在您的情况下,您正在传递对象:

MyGlobalVar = new Object();

在JS中,对象通过引用传递。 因此,您仍在使用该变量。

您可以这样确认:

var MyGlobalVar = null;

function PlayWithMyGlobal() {
    MyGlobalVar = new Object();
    MoreFun(MyGlobalVar);
}

function MoreFun(TheVar) {
    MyGlobalVar.foo = 'I am foo'; // property created here
}

PlayWithMyGlobal();
console.log(MyGlobalVar.foo); // I am foo

答案 1 :(得分:2)

如果全局变量是一个对象,那么您仍在使用全局变量。否则,它是一份副本。

如下所示和注释,您的变量指向同一个全局对象。

var MyGlobalVar = null;

function PlayWithMyGlobal() {
    MyGlobalVar = new Object(); // <--- Object
    MoreFun(MyGlobalVar); // <--- Passing object reference
}

function MoreFun(TheVar) {
    TheVar.test = 'Did I modify global?';
    alert(TheVar === MyGlobalVar); // true
    alert(MyGlobalVar.test);       // "Did I modify global?"
} 

答案 2 :(得分:1)

是的,您对全局引用的同一对象有本地引用。

一个简单的测试就是......

console.log(MyGlobalVar === TheVar); // should be true