對不起這個問題,但這個問題真的搞砸了我的一天。爲什麼局部變量會殺死我的全局變量?
下面的代碼提醒理所應當:
var globalId='10';
function check(){
alert(globalId);
}
check();
但是,這下面的代碼警報未定義:
var globalId='10';
function check(){
alert(globalId);
var globalId;
}
check();
我知道,如果我在一個函數聲明一個變量它是一個局部變量,但是如果我已經將其聲明爲全局變量,那麼我的警報怎麼會這麼說?undefined?
這是一個簡單的例子,但在我的原代碼,我做了很多的東西在函數的開始之間,再長的路下來我檢查,看看是否globalId
定義,否則定義它:if(!globalId){var globalId;}
這意味着生成我的警報坐落在函數的頂部定義,彷彿JavaScript的第一個執行的整體功能,只是爲了看看是否有任何變量「可能」來聲明,如果是的話,宣佈他們,因此我的警報指出,一個「未申報的」變量。
任何人都可以向我解釋,爲什麼出現這種情況,如果這是真的,JavaScript的執行函數之前的「前宣稱」所有的變量,即使在條件聲明的變量甚至沒有見過面嗎?
+1非常好的問題 – 2013-01-02 12:53:57
局部變量總會有對全球那些precendence。在C和大多數其他語言中是一樣的。在C++中,您可以通過'::'選擇全局變量。無論如何,命名全局變量和局部變量同樣是一種不好的做法 – 2014-05-22 04:03:41