我有一个全局变量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?
}
如果我传递全局变量,我还在使用全局吗? 感谢。
答案 0 :(得分:5)
如果我传递全局变量,我还在使用全局吗? 感谢。
这取决于您传递的变量是 对象 还是 原语 (number
,首先是string
,boolean
,undefined
,null
是原始值。对象通过引用和基元按值传递。
在您的情况下,您正在传递对象:
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