-1

私はこの記事を読んでいて、それは本当に素晴らしいものでした。私はただ現在私の頭の中を通り抜けているいくつかの質問が欲しいです。

function foo(i) {
    var a = 'hello';
    var b = function privateB() {

    };
    function c() {

    }
}

foo(22);

foo(22)を呼び出すと、作成段階は次のようになります。

fooExecutionContext = {
    variableObject: {
        arguments: {
            0: 22,
            length: 1
        },
        i: 22,
        c: pointer to function c()
        a: undefined,
        b: undefined
    },
    scopeChain: { ... },
    this: { ... }
}
  1. なぜ長さは1つです。
  2. scopeChainキーには何が含まれていますか。
  3. これも何を指しますか。[グローバルコンテキストor、関数コンテキストを参照していますか]
  4. 誰かが私が試すことができる同じトピックと例に関する別のリソースを私に指摘できますか?

私は物事のJS側に非常に新しいです。私はただ自分自身を正し、皆さんからより明確になりたいのです...私が間違っていないように。

4

1 に答える 1

1

関数が呼び出されると、ExecutionContextが作成されます。これは、関数の環境の大きな部分を定義します。

1.なぜ長さは 1.

関数を見てみましょうarguements。プロパティが作成されます。このオブジェクトには長さが含まれます (つまり、関数に渡される引数の数)

それでは、以下の例を見てみましょう。

function myFun1(a,b){
     function myFunc2(){
         alert("hello");
     }
}

myFun1(10,20);

myFun1 の ExecutionContext

ExecutionContext: {
      variableObject: {
        arguments: {
           0: '10', 1: '20', 
           length: 2
       }
     }
}

2.これも何を指しますか。[グローバルコンテキストまたは関数コンテキストを参照しますか]

thisプロパティが作成され、関数がどのように呼び出されたかによって異なります。

  1. 通常の関数** myFunction(args)=> グローバル オブジェクトを参照します...つまり、ウィンドウ オブジェクトです。
  2. オブジェクトメソッドobject.myFunction(args)=> オブジェクトを参照します。
  3. コールバックcall() or apply().this の値は の最初の引数ですcall()/apply().
  4. コンストラクターとして(new myFunction(1,2,3))。this の値は、プロトタイプとして myFunction.prototype を持つ空のオブジェクトです。
于 2012-12-29T01:34:33.097 に答える