我知道全局变量是在函数外部声明时创建的(比如 W3Schools)。
如果我创建一个全局变量并在函数中编辑它,它会变成本地变量吗?函数给出的新值是否成为全局值?
我知道全局变量是在函数外部声明时创建的(比如 W3Schools)。
如果我创建一个全局变量并在函数中编辑它,它会变成本地变量吗?函数给出的新值是否成为全局值?
一般来说,不,编辑全局不会使其成为本地:
var myglob = 5;
function incGlob() {
myglob = myglob + 1;
}
incGlob();
console.log(myglob); // is 6 now
但是,如果您将全局变量作为参数传递,则该参数是本地副本:
var myglob = 5;
function incArg(myloc) {
myloc = myloc + 1;
}
incArg(myglob);
console.log(myglob); // is still 5
请注意,对象是通过引用传递的,因此编辑参数变量的成员变量会更改传入的原始对象的成员变量:
var myglob = { foo:5 };
function editLoc(myloc) {
myloc.foo = 6;
}
editLoc(myglob);
console.log(myglob.foo); // foo is 6 now
最后,请注意editLoc
,上面的局部变量只是一个参考。如果我们试图覆盖整个对象(而不是一个成员变量),函数只会丢失对原始对象的引用:
var myglob = { foo:5 };
function clobberLoc(myloc) {
myloc = { bar:7 };
}
clobberLoc(myglob);
console.log(myglob.foo); // myglob is unchanged...
// ...because clobberLoc didn't alter the object,
// it just overwrote its reference to the object stored in myglob
不,编辑全局变量不会改变变量的范围。分配的新值成为全局值。
myGlobal = 'foo'; // notice no 'var' keyword, implicitly global (DON'T DO THIS)
console.log(myGlobal); // logs 'foo'
var myFunc = function () {
myGlobal = 'bar';
};
myFunc();
console.log(myGlobal); // logs 'bar'
是的。
var
如果您使用关键字在函数内声明它,您只会创建一个局部变量。
新值成为全局值。