2013-02-21 10 views
52

なぜJavaScriptは変数を持ち上げるのですか?JavaScriptがなぜ変数を持ち上げるのですか?

設計者がホイストを実装することを決定した理由は何ですか? これを行う他の一般的な言語はありますか?

ドキュメントや記録に関連するリンクを提供してください。

+1

[javascriptには本当に語彙的スコープがありません](http://stackoverflow.com/a/372​​5763/344643)その意味は –

+0

ニース!なぜなのかご存知ですか ? – Xlaudius

+4

私は* this *が歴史的だと思うし、もともと「実装の容易さ」以外のものであると真剣に疑っています。 –

答えて

34

Stoyan Stefanovが「JavaScript Patterns」の本で説明しているように、ホイストはJavaScriptインタプリタの実装の結果です。

JSコード解釈は2回のパスで実行されます。最初のパスでは、インタプリタは変数宣言と関数宣言を処理します。

第2パスは実際にはコード実行ステップです。インタプリタは関数式と宣言されていない変数を処理します。

したがって、このような動作を記述するために「ホイスト」概念を使用できます。

これが役に立ちます。

+8

私は個人的には_really_ "ホイスト"という言葉が好きではありません。変数と関数の宣言が現在のスコープの最上部に魔法のように吊り下げられているという誤った表現をしています。実際にJSインタープリターはあなたが述べたように、バインディングのソースコードをスキャンして**コードを実行します。 – contactmatt

+0

今私はJSが最も誤解された言語を持っている理由を知りました。私はチュートリアルでこれを見ていませんでした。そして、吊り上げること(とinterepreterの流れ)と混同しました。 –

+2

これは本当の理由を説明していません。シングルパス通訳(これは吊り上げにつながりませんでした)ははるかに簡単でした。なぜデザイナーは2つのパスを選んだのですか? – Bergi

関連する問題