这是一个简单的问题。JS全局变量到局部变量
我知道全局变量是在函数外声明时创建的(说w3schools.com)。
我的问题是,如果我创建一个全局变量并在函数中编辑它,它会变成本地的吗?函数赋予的新值是否成为全局值?
这是一个简单的问题。JS全局变量到局部变量
我知道全局变量是在函数外声明时创建的(说w3schools.com)。
我的问题是,如果我创建一个全局变量并在函数中编辑它,它会变成本地的吗?函数赋予的新值是否成为全局值?
一般来说,不,编辑一个全球性的并不能使本地:
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'
我更喜欢'window.myGlobal ='foo''而不是'var myGlobal',因为'var'的使用在函数之外引起误解......(它不是*词汇变量,而是一个属性,并且不使用相同的关闭规则) – 2012-06-04 19:48:14
@pst为你编辑:) – jbabey
http://w3fools.com – SLaks
你为什么不考呢?保持简单愚蠢:) – Jashwant