3 回答

TA貢獻1884條經(jīng)驗 獲得超4個贊
忘記var時的副作用
隱含全局變量和明確定義的變量之間存在一個細微差別。區(qū)別在于使用delete運算符取消定義這些變量的能力:
?無法刪除使用var創(chuàng)建的全局變量(在任何函數(shù)之外的程序中創(chuàng)建的全局變量)。
?可以刪除在沒有var的情況下創(chuàng)建的隱含全局變量(無論是否在函數(shù)內(nèi)創(chuàng)建)。
這表明隱含的全局變量在技術(shù)上不是真正的變量,但它們是全局對象的屬性??梢允褂胐elete運算符刪除屬性,而變量不能:
// define three globals
var global_var = 1;
global_novar = 2; // antipattern
(function () {
? ?global_fromfunc = 3; // antipattern
}());
// attempt to delete
delete global_var; // false
delete global_novar; // true
delete global_fromfunc; // true
// test the deletion
typeof global_var; // "number"
typeof global_novar; // "undefined"
typeof global_fromfunc; // "undefined"
在ES5嚴格模式下,對未聲明變量的賦值(例如前面代碼段中的兩個反模式)將引發(fā)錯誤。

TA貢獻1770條經(jīng)驗 獲得超3個贊
全局變量的唯一用途是,如果您需要全局訪問它們。在這種情況下,您應該使用var
函數(shù)外部的關(guān)鍵字來聲明它們,以明確您確實要創(chuàng)建全局變量,并且不要忘記var
在嘗試聲明局部變量時。
通常,您應該嘗試對代碼進行范圍調(diào)整,以便在全局范圍內(nèi)盡可能少地使用代碼。您在腳本中使用的全局變量越多,您在另一個腳本中使用它的可能性就越小。
通常,函數(shù)中的變量應該是局部變量,以便在退出函數(shù)時它們消失。
添加回答
舉報