這是一個簡單的問題。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