JAvascriptエンジンLHSクエリーとRHSクエリーの違い
3099 ワード
結論:LHSクエリーボックス、RHSクエリー値
例:
LHSクエリー
上記の付与文は、a変数に対してLHSクエリを実行し、=2の付与操作のためにターゲット、すなわちボックスを見つけることを目的としています.
コンパイラがvar aに遭遇すると、役割ドメインにaという変数がすでに存在するかどうかを尋ねます.存在する場合、コンパイラは宣言を無視してコンパイルを続行し、存在しない場合は、現在の役割ドメインに新しい変数を宣言し、aと命名するように役割ドメインに要求します.
RHS照会
上記の1つの印刷文は、a変数に対して実行されるときにRHSクエリを行います.これは、a変数の内部の値を見つけて印刷することを目的としているので、それに値を割り当てるのではなく、印刷することを目的としています.
コードの例:
1.4行目にfn()関数を呼び出すと、その値にアクセスするRHSクエリが行われます.2.fn関数を呼び出すと、そのパラメータaが付与されます.すなわち、aという変数ボックスを探して1を格納し、LHSクエリを行います.3.2行目にaの値を印刷する際にa変数内部の値を照会したためRHS照会を行った.
1.var c宣言変数LHS 2.fn 2呼び出し関数RHS 3.fn 2(2)パラメトリック値LHS 4.var b宣言変数LHS 5.b=a a a値RHS 6を取得する.return a+b a値RHS 6を取得する.return a+b b b b取得b値RHS
RHSクエリーを実行する場合、すべての親の役割ドメインを検索してもその変数が見つからない場合は、ReferenceError異常を投げ出してLHSクエリーを実行します.この変数が見つからない場合は、現在非厳格モードであることを前提として、この変数が作成されます.
例:
LHSクエリー
var a = 2;
上記の付与文は、a変数に対してLHSクエリを実行し、=2の付与操作のためにターゲット、すなわちボックスを見つけることを目的としています.
コンパイラがvar aに遭遇すると、役割ドメインにaという変数がすでに存在するかどうかを尋ねます.存在する場合、コンパイラは宣言を無視してコンパイルを続行し、存在しない場合は、現在の役割ドメインに新しい変数を宣言し、aと命名するように役割ドメインに要求します.
RHS照会
console.log(a);
上記の1つの印刷文は、a変数に対して実行されるときにRHSクエリを行います.これは、a変数の内部の値を見つけて印刷することを目的としているので、それに値を割り当てるのではなく、印刷することを目的としています.
コードの例:
1. function fn(a) {
2. console.log(a); //1
3. }
4. fn(1);
1.4行目にfn()関数を呼び出すと、その値にアクセスするRHSクエリが行われます.2.fn関数を呼び出すと、そのパラメータaが付与されます.すなわち、aという変数ボックスを探して1を格納し、LHSクエリを行います.3.2行目にaの値を印刷する際にa変数内部の値を照会したためRHS照会を行った.
1. function fn2(a) {
2. var b = a;
3. return a + b;
4. }
5. var c = fn2(2);
1.var c宣言変数LHS 2.fn 2呼び出し関数RHS 3.fn 2(2)パラメトリック値LHS 4.var b宣言変数LHS 5.b=a a a値RHS 6を取得する.return a+b a値RHS 6を取得する.return a+b b b b取得b値RHS
RHSクエリーを実行する場合、すべての親の役割ドメインを検索してもその変数が見つからない場合は、ReferenceError異常を投げ出してLHSクエリーを実行します.この変数が見つからない場合は、現在非厳格モードであることを前提として、この変数が作成されます.