以下のコードは JavaScript コードです。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";
は、牛変数の値を「glue」に設定する必要があります。if ブロックを削除して、最後のステートメントで alert cow を実行すると、文字列 "glue" が警告されることがわかります。
f(2) が呼び出されると、if コード ブロックが入力されず、その中の何も実行されないのに、異なる結果が表示されるのはなぜですか? つまり、最後のステートメントで alerting cow が文字列 "purple" を返すのはなぜですか?