Javascriptコード
var d = function c() { console.log(c); };
d(); // function c() { console.log(c); };
c(); // Reference Error
変数宣言と関数定義が既存のスコープの一番上に持ち上げられる変数巻き上げの概念を理解しています。また、関数式の関数定義は引き上げられません。
だから、上記は
var d;
d = function c() { console.log(c); };
d();
c();
したがって、dは名前付き関数cへの参照です。
- 関数cの実行
d()
時に、cという名前の変数またはプロパティがないグローバルスコープで実行されます。しかし、それでもコンソールはcの関数定義をログに記録することができます。 - 試し
c()
たところ、参照エラーが発生しました。[私の期待通りに]
ケース2は、cという名前のウィンドウプロパティが利用できないことを証明しています。では、d()
実行時にcの定義をどのように出力できたのでしょうか。
すべての関数は、ローカルスコープにプロパティとして独自の定義を持っていますか?