『javascript高級プログラム設計』読書ノート——作用領域
3141 ワード
実行環境:
1. 実行環境(execution context):変数と関数がアクセスできる他のデータを定義し、それぞれの行動を決定しました.
2.各実行環境には関連がある.
変数オブジェクトは、実行環境で定義されたすべての変数と関数をこのオブジェクトに保存します.
3.私たちが作成したコードはこのオブジェクトにアクセスできません.しかし、データを処理する際には、その背景に使っています.
4.グローバル実行環境は最も周辺的な実行環境である.
5.ある実行環境におけるすべてのコードが実行された後、この環境は破壊され、その中に保存されているすべての変数と関数も破壊されました.(グローバル実行環境はアプリケーションが終了したことを知っています.例えば、ウェブページや遊覧器をオフにした場合、廃棄されます.)
6.各関数は呼び出し時に自分の実行環境を作成します.実行フローが関数に入ると、関数の環境は環境スタックに押し込まれます.そして、関数実行後、スタックはその環境をイジェクトして、コントロールを前の実行環境に戻します.ECMAScriptプログラムの実行フローはこの便利なメカニズムによって制御されています.
スコープ:
1.コードが実行環境で実行されると、変数オブジェクトから構成される
スコープチェーン(scope chain)
2.作用ドメインチェーンの用途は、実行環境にアクセスできるすべての変数と関数を保証するものです.
きちんと訪問する
3.スコープの先端は、現在実行されている環境のコードがある環境の変数オブジェクトです.
4.この環境が関数であれば、その活動対象を変数の対象とし、活動対象は最初の時点で一つの変数だけを含んでいます.つまり、argmentsオブジェクト(このオブジェクトはグローバル環境には存在しません.)
5.作用ドメインチェーンの次の変数オブジェクトは、含まれる(外部)環境から来ます.他の変数オブジェクトは、次の環境を含むから来ます.このようにして、グローバル実行環境に至るまで継続します.グローバル実行環境の変数オブジェクトは常にフィールドチェーンの最後のオブジェクトです.
識別子解析:
識別子解析は、ロールドメインチェーンに沿って識別子を1段階ずつ検索するプロセスであり、検索プロセスは常にロールドメインチェーンのフロントエンドから開始され、その後、レベルを追って後に遡り、識別子が見つかるまで(識別子が見つからないと、通常はエラーが発生する).
javascriptにはブロックレベルの作用領域がありません.
一、
二、
varキーを使って変数を宣言すると、この変数は最近の利用可能な環境に自動的に追加されます.
javascriptコードを作成する過程で、var宣言を使わずに直接変数を初期化するのはよくある間違いのやり方です.私達の提案は変数を初期化する前に、必ず先に声明します.このような状況は避けられます.
varで変数を宣言して、関数の外部で、つまりwindow領域でvarをプラスしないのは確かに同じで、いずれも大域の効果なため、もし内部をくわえるならば、varをプラスするのは局部の変数で、プラスしないのは大域の変数です.
クエリー識別子:
レベルを上に検索
ある関数が最初に呼び出された時に、実行環境(execution context)すなわち対応する作用ドメインチェーンが作成され、その作用ドメインチェーンは特殊な内部属性Scopeに割り当てられ、そしてthis、argmentsと他のネーミングパラメータの値を使って関数の活動対象を初期化します.ただし、作用領域では、外部関数の活動対象は常に第二位にあります.
参考書:
「javascript高級プログラム設計」
1. 実行環境(execution context):変数と関数がアクセスできる他のデータを定義し、それぞれの行動を決定しました.
2.各実行環境には関連がある.
変数オブジェクトは、実行環境で定義されたすべての変数と関数をこのオブジェクトに保存します.
3.私たちが作成したコードはこのオブジェクトにアクセスできません.しかし、データを処理する際には、その背景に使っています.
4.グローバル実行環境は最も周辺的な実行環境である.
5.ある実行環境におけるすべてのコードが実行された後、この環境は破壊され、その中に保存されているすべての変数と関数も破壊されました.(グローバル実行環境はアプリケーションが終了したことを知っています.例えば、ウェブページや遊覧器をオフにした場合、廃棄されます.)
6.各関数は呼び出し時に自分の実行環境を作成します.実行フローが関数に入ると、関数の環境は環境スタックに押し込まれます.そして、関数実行後、スタックはその環境をイジェクトして、コントロールを前の実行環境に戻します.ECMAScriptプログラムの実行フローはこの便利なメカニズムによって制御されています.
スコープ:
1.コードが実行環境で実行されると、変数オブジェクトから構成される
スコープチェーン(scope chain)
2.作用ドメインチェーンの用途は、実行環境にアクセスできるすべての変数と関数を保証するものです.
きちんと訪問する
3.スコープの先端は、現在実行されている環境のコードがある環境の変数オブジェクトです.
4.この環境が関数であれば、その活動対象を変数の対象とし、活動対象は最初の時点で一つの変数だけを含んでいます.つまり、argmentsオブジェクト(このオブジェクトはグローバル環境には存在しません.)
5.作用ドメインチェーンの次の変数オブジェクトは、含まれる(外部)環境から来ます.他の変数オブジェクトは、次の環境を含むから来ます.このようにして、グローバル実行環境に至るまで継続します.グローバル実行環境の変数オブジェクトは常にフィールドチェーンの最後のオブジェクトです.
識別子解析:
識別子解析は、ロールドメインチェーンに沿って識別子を1段階ずつ検索するプロセスであり、検索プロセスは常にロールドメインチェーンのフロントエンドから開始され、その後、レベルを追って後に遡り、識別子が見つかるまで(識別子が見つからないと、通常はエラーが発生する).
javascriptにはブロックレベルの作用領域がありません.
if(true){
var name = 'zhujiadun';
}
console.log(name);//zhujiadun
変数宣言:一、
function add(num1,num2){
var sum = num1 + num2;
return sum;
}
var result = add(10,20);
console.log(result);//30
console.log(sum);//
二、
function add(num1,num2){
sum = num1 + num2;
return sum;
}
var result = add(10,20);
console.log(result);//30
console.log(sum);//30
varキーを使って変数を宣言すると、この変数は最近の利用可能な環境に自動的に追加されます.
javascriptコードを作成する過程で、var宣言を使わずに直接変数を初期化するのはよくある間違いのやり方です.私達の提案は変数を初期化する前に、必ず先に声明します.このような状況は避けられます.
varで変数を宣言して、関数の外部で、つまりwindow領域でvarをプラスしないのは確かに同じで、いずれも大域の効果なため、もし内部をくわえるならば、varをプラスするのは局部の変数で、プラスしないのは大域の変数です.
クエリー識別子:
レベルを上に検索
ある関数が最初に呼び出された時に、実行環境(execution context)すなわち対応する作用ドメインチェーンが作成され、その作用ドメインチェーンは特殊な内部属性Scopeに割り当てられ、そしてthis、argmentsと他のネーミングパラメータの値を使って関数の活動対象を初期化します.ただし、作用領域では、外部関数の活動対象は常に第二位にあります.
参考書:
「javascript高級プログラム設計」