7

JavaScript の学習の一環として、学習している概念を示すコードを記述しようとしています。今日は巻き上げ変数を学んでいます。ここに私が書いたコードがあります:

console.log("A: My name is " + name);   

function happy() {
  console.log ("1: I am " + feeling);   
    var feeling = "happy";
  console.log ("2: I am " + feeling);   
}
happy(); 

var name = "Jim";
console.log("B: My name is " + name);   

次の結果を期待しました。

A: My name is undefined
1: I am undefined
2: I am happy
B: My name is Jim

ただし、WriteCodeOnline.com および別のサンドボックスでコードをテストすると、最初の console.log が表示されますA: My name is。それが違いを生む場合、私はChromeブラウザを使用しています。

ですから、私の質問は、関数内のホイストされたローカル変数が undefined を返すのに、ホイストされたグローバル変数が空白を返すのはなぜですか?

4

1 に答える 1

7

ここで起こっているのは、window.nameにアクセスしていることです。

これは の事前定義されたプロパティでwindowあるため、ホイストvar nameは実際には新しい変数を作成していません。その名前のグローバル スコープには既に 1 つあり、既定では空白の文字列値が含まれています。

期待どおりの動作を観察するには、 以外の変数名を使用するnameか、コードを関数内に配置します。

function hoisting() {
  console.log("A: My name is " + name);   

  function happy() {
    console.log ("1: I am " + feeling);   
    var feeling = "happy";
    console.log ("2: I am " + feeling);   
  }
  happy(); 

  var name = "Jim";
  console.log("B: My name is " + name);   
}

hoisting();

于 2014-12-30T22:26:54.203 に答える