簡體   English   中英

JavaScript 全局變量到局部變量

[英]Global variable to local variable in JavaScript

我知道全局變量是在函數外部聲明時創建的( 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 

不,編輯全局變量不會改變變量的范圍。 分配的新值成為全局值。

http://jsfiddle.net/RtnaB/

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關鍵字在函數內聲明它,您只會創建一個局部變量。

新值成為全局值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM