JavaScriptが変数をホイストするのはなぜですか?
ホイストを実装することを決定したときの設計者の論理的根拠は何でしたか?これを行う他の人気のある言語はありますか?
ドキュメントや記録への関連リンクを提供してください。
JavaScriptが変数をホイストするのはなぜですか?
ホイストを実装することを決定したときの設計者の論理的根拠は何でしたか?これを行う他の人気のある言語はありますか?
ドキュメントや記録への関連リンクを提供してください。
div
、jQueryでを移動するだけです
回答:
Stoyan Stefanovが「JavaScriptPatterns」の本で説明しているように、巻き上げはJavaScriptインタープリターの実装の結果です。
JSコードの解釈は2つのパスで実行されます。最初のパスで、インタープリターは変数と関数の宣言を処理します。
2番目のパスは、実際のコード実行ステップです。インタプリタは、関数式と宣言されていない変数を処理します。
したがって、「巻き上げ」の概念を使用して、このような動作を説明できます。
「したがって、varホイストは、機能ホイストの意図しない結果であり、ブロックスコープはなく、1995年の急ぎの仕事としてのJSでした。」
「関数の巻き上げにより、トップダウンのプログラム分解が可能になります。「let rec」は無料で、宣言する前に呼び出します。varの巻き上げにはタグが付けられます。」
同じ方法で変数を持ち上げる他の人気のある言語を私は知りません。私は、ActionScript(Flash開発で使用されるECMAScriptの別の実装)でさえ、巻き上げを実装していなかったと思います。これは、JavaScriptを学習している他の言語に精通している開発者にとって混乱とフラストレーションの原因となっています。
更新:コメントから、Pythonには同様の変数の巻き上げ動作があります。
これは、javascriptインタープリターが2サイクルでコードを解釈するためです。
第一サイクルでは、すべての変数と関数の宣言は、それが中で実行している関数のスコープの一番上に移動します。これは、作成するのに役立ちますvariableObjects
のためにexecution context
実行前であっても関数の。
第2フェーズでは、値の割り当て、コードステートメント、および関数呼び出しが、期待どおりに1行ずつ実行されます。
それはあなたの行動を周りの周りに優れた画像を与えるだろうlet
、const
とclass
も、それは変数や関数の間で、次の優先を宣言。