2017-01-11 12 views
0

私はいくつかの本を読んでいます。ジャバスクリプトを学んでいます。字句スコープは、あなたが(あなたがそれを呼び出したときとは対照的に)から 機能を定義した変数がスコープ内にあるものは何でも意味JavaScriptがレキシカルスコープを理解するのに苦労している

は 機能でスコープで

ている私はいくつかの基本的な例を試みた:

function f() { 
    console.log(x); 
} 
const x = 10; 
f(); // 10 

これはどのように機能し、なぜ10の値を記録するのですか?変数xは関数を定義するときには存在しません。私はjavascriptのnoobだから、多分私はここで何かを欠いている。前もって感謝します。

+0

確認[この動画](https://www.youtube.com/watch?v=ByG-RU5fCcQ&t=52s)が割り当てられ

ポスト: 50。レキシカルスコープをうまく記述します。私はそれが役に立ちました。 –

答えて

0

これはHoistingという概念のためです。 基本的に、宣言はスコープの先頭に移動されるため、スコープ内のどこにでも常にアクセスできます。

関数IDが定義されている間、語彙スコープはxへの参照を取得します。 xが6で10

Read more about hoisting in JS here. (JavaScriptisSexy.com) More specifically about Hoisting and const here.

+0

ホイストはここでは無関係です(とにかく、関数の宣言の上に代入が上げられません)。代入演算子の使用は決して吊り上げられません。 'const'キーワード(' var'と違って)は吊り上げられません。 – Quentin

+0

参照はそうですが。 –

+0

再編集:いいえ、 'const'文は吊り上げられません。 'This'(http://jsbin.com/cogubon/1/edit?js,console)は、' const'が吊り上げられていないので、参照エラーを投げます。 [This](http://jsbin.com/cogubon/2/edit?js,console)は、値を代入せずに定数を持つことができないので、Syntax Errorをスローします(または後で値を代入します) – Quentin

関連する問題