-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. 为什么长度是一。
  2. scopeChain 键包含什么。
  3. 这也指什么。[它是指全局上下文or还是函数上下文]
  4. 谁能指出我可以尝试的同一主题的另一个资源和示例。

我对 JS 方面很陌生。我只是想纠正自己并从你们那里得到更多的澄清......所以我没有错。

4

1 回答 1

1

调用函数时,ExecutionContext会创建 an。这定义了函数环境中的很大一部分。

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. 回调 for call() or apply().this 的值是第一个参数call()/apply().
  4. 作为构造函数(new myFunction(1,2,3))。this 的值是一个以 myFunction.prototype 为原型的空对象。
于 2012-12-29T01:34:33.097 回答