1

このコードが機能する理由

const btn = document.getElementById("btn");

btn.onclick = function() {
  printMe(obj);
};

function printMe(person) {
  console.log(person.firstName, person.lastName);
}

const obj = {
  firstName: "John",
  lastName: "Wick"
};
<button id="btn">Click me!</button>

そして/しかし、これはそうではありません(私が知っている一時的なデッドゾーン)

printMe(obj);

function printMe(person) {
  console.log(person.firstName, person.lastName);
}

const obj = {
  firstName: "John",
  lastName: "Wick"
};

吊り上げと関係ありますか?このトピックについてさらに読むことをお勧めします。

4

2 に答える 2

1

宣言は巻き上げられますが、代入は巻き上げられません。printMe(obj)したがって、2 番目のコードでは、宣言された呼び出しの呼び出し中に関数が巻き上げられて定義されますが、 undefinedOR ではなくunintialized参照objの結果は次のようになります。ReferenceError

最初の例では、すべてが期待どおりに宣言および定義されている後の時点 (ボタンのクリック時) まで関数を呼び出していません。

詳細はこちら: https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20%26%20closures/ch4.md#chicken-or-the-egg

于 2018-05-13T17:28:20.450 に答える