下面的代碼是JavaScript代碼。我正在嘗試理解JavaScript中的函數範圍,並且在here之後的文章之後。我正在複製下面的代碼 -瞭解JavaScript函數範圍
var cow = "purple"; // just a random cow
var f = function (x) {
var r = 0;
cow = "glue";
if (x > 3) {
var cow = 1; // a local variable
r = 7;
}
return r;
};
var z = f(2);
alert(cow); // returns purple
我不太明白爲什麼字符串「紫色」被警告。 cow = "glue";
行應該將cow變量的值設置爲「glue」。如果我刪除了if塊,然後在最後一條語句中警告牛,我會看到字符串「glue」被警告。
當f(2)被調用時,if代碼塊沒有被輸入,也沒有任何內容被執行,所以爲什麼我會看到不同的結果?即爲什麼在上一條語句中提醒母牛現在返回字符串「purple」?
實際上,即使'catch'塊都沒有自己的作用域(*變量*環境)。請參閱[爲什麼catch子句有自己的*詞法*環境?](http://stackoverflow.com/q/15034864/1048572) – Bergi