JavaScript 上級プログラミング (第 4 版) 読書 共有 メモの記録
始めたばかりの仲間に適用
実行コンテキスト
変数または関数のコンテキストによって、アクセスできるデータとその動作が決まります。
ブラウザでは、グローバル コンテキストは、
ウィンドウ
オブジェクトと
よく呼ばれるものです(第
12章
で詳しく紹介します)。そのため、
varを通じて
定義されたすべてのグローバル変数と関数は、ウィンドウオブジェクト
のプロパティとメソッドになります。
例:
var color = "blue";
function changeColor() {
let anotherColor = "red";
function swapColors() {
let tempColor = anotherColor;
anotherColor = color;
color = tempColor;
// 这里可以访问 color、anotherColor 和 tempColor
}
// 这里可以访问 color 和 anotherColor,但访问不到 tempColor
swapColors();
}
// 这里只能访问 color
changeColor();
上記のコードには
3 つの
コンテキストが含まれています。
グローバル コンテキスト、
changeColor()
のローカル コンテキスト、
wapColors ()
のローカル コンテキスト。
- 内部コンテキストはスコープ チェーンを通じて外部コンテキスト内のすべてにアクセスできますが、外部コンテキストは内部コンテキスト内のすべてにアクセスできません。
- 各コンテキストは上位レベルのコンテキストに移動して変数や関数を検索できますが、どのコンテキストも下位レベルのコンテキストに移動して検索することはできません。
変数宣言
varを使用した関数スコープ宣言
- varを使用して変数を宣言すると、変数は最も近いコンテキストに自動的に追加されます。
- var宣言は、スコープ内のすべてのコードの前に、関数またはグローバル スコープの先頭に置かれます - 「変数ホイスティング」
letを使用したブロックスコープ宣言
- ES6の新しいletキーワードはvarに非常に似ていますが、スコープは block-level であり、これもJavaScriptの新しい概念です。
- ブロックレベルのスコープは、最も近い中括弧 {} のペアで区切られます。
-
if ブロック、 while ブロック、 関数 ブロック、さらには個々のブロックも let 宣言変数のスコープです
let と var のもう 1 つの違いは、同じスコープ内で 2 回宣言できないことです。重複した var 宣言は無視され、重複した let 宣言によって SyntaxError が発生します 。