2

Kyle Simpson によるYou don't know JSのScopes and Closureタイトル、特にこのトピックCompiler Speakを読んでいました。このセクションでは、エンジンが使用するルックアップの種類について説明します。これで、このセクションで説明した範囲で、LHS または RHS ルックアップとは何かを理解できました。

私の問題は、フォームの関数宣言がfunction fx(a) {..LHS ルックアップではないというメモです。同じ説明がありますが、理解できません。全メモはこちら

関数宣言 function を、 や などの通常の変数宣言と代入として概念化する誘惑に駆られるかもしれませfoo(a) {...ん。そうすることで、この関数宣言が LHS ルックアップを含むものと考えたくなるでしょう。ただし、微妙ではありますが重要な違いは、コンパイラがコード生成中に宣言と値定義の両方を処理することです。これにより、エンジンがコードを実行するときに、関数値を に「割り当てる」ための処理が必要なくなります。したがって、ここで説明している方法で、関数宣言を LHS ルックアップ代入と考えるのは適切ではありません。var foofoo = function(a){...foo

どんな種類の明確化も役に立ちます。LHS および RHS ルックアップでも。

4

2 に答える 2

2

「ルックアップ」のトピックは、式の評価に関係するものです。関数宣言文

function someName() {
  // code
}

は表現ではありません。これは、別個のステートメント タイプであるのと同じようにreturn、別個のステートメント タイプです。ローカル スコープ内の関数名にバインドされる新しい関数オブジェクトの暗黙的なインスタンス化を除いて、関数宣言ステートメントでは式の評価は行われません。whileif

LHS 値と RHS 値 (通常、私の経験では、文献では左辺値と右辺値と呼ばれます) のトピック重要ですが、関数宣言とは何の関係もありません。

于 2015-10-27T14:32:50.707 に答える