1

実行コンテキストのワークフローの簡単な説明を理解しようとしています。

-- コード

var a=10;

function sample(){

   var y = 10;

};

--

  • Javascript エンジンが起動します。
  • グローバル実行コンテキストが作成されます。
  • レキシカルおよび変数環境オブジェクトが作成されます。
  • このプロパティが作成されます。グローバル オブジェクトを指します。
  • 環境オブジェクト (レキシカルおよび変数) には、環境レコードと
    外部プロパティがあります。
    このコンテキストで環境オブジェクトの違いを説明することで、誰でも助けてくれますか?

  • 作成フェーズでは、グローバル コンテキスト用にコード変数をスキャンします。

  • Environment オブジェクト (レキシカルまたは変数 ??) 内の環境レコードは、変数の定義を保持します。
  • 関数のコードをスキャンし、サンプル関数を見つけます。関数を見つけるとどうなりますか? [[scope]] プロパティは設定されていますか?? 誰かが [[scope]] プロパティの明確な説明を与えることができれば素晴らしいだろう

  • グローバル実行コンテキストの実行フェーズが開始されます。

  • 関数サンプルに到達します。
  • サンプル関数コンテキストが作成されます。
  • 上記と同様の手順が作成フェーズで発生します。
  • 実行コンテキストが作成されます(
  • レキシカルで可変的な環境が作成されます)

  • レキシカル環境には、グローバルなレキシカル環境を指す環境レコードと外部環境があります。
  • 変数環境も同様のプロパティで作成されます。
  • 変数が巻き上げられます。
  • [[scope]] プロパティに変更が加えられましたか??
  • 実行は実行フェーズに入ります。等々。

注意:関数式やtry catch句などがあると、説明と動作が変わることを理解しています。そのような状況では、変数環境が作用することを読みました。上記の機能のワークフローを探しています。関数の引数でさえ、引数プロパティを作成します。それも無視できます。上記のサンプルコードに基づいて、レキシカル、変数環境、および [[scope]] プロパティを非常に簡単に説明します。このプロパティもあります。この場合、それは単なるグローバルオブジェクトです-両方のコンテキストのウィンドウだと思います。物事を単純にするために、それも無視しましょう:)。これを理解した後、別の質問を作成します:)。

誰かがこの基本的な概念を理解するのを手伝ってくれることを願っています. ES5ベースの説明を探しています。よろしくお願いいたします。

ミア

4

1 に答える 1

0

コードで var を使用すると、Javascript は変数の巻き上げを行います。

var a=10;

function sample(){

   var y = 10;

};

したがって、コンパイラは上記のコードを次のように変換します。変数はスコープの一番上に引き上げられます。

var a=undefined;
a=10;

function sample(){
  var y=undefined; // this is because var is function scoped in javascript
  y=10;
};

また、次のコードがあるとします。

var a=10;

if(true){
  var b=20;
}

上記のコードは、コンパイラによって次のように変換されます。

var a=undefined;
var b=undefined;

    a=10;
    if(true){
       b=20;
    }
于 2016-08-26T09:13:33.607 に答える