执行上下文 - 创建和激活阶段

时间:2012-12-28 22:25:23

标签: javascript

我正在经历this article,这真的很棒。我只想要一些目前正在考虑的问题。

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. 任何人都可以指出我可以尝试的同一主题和示例的其他资源。
  5. 我对JS方面很新。我只是想纠正自己,让你们更清楚......所以我没有错。

1 个答案:

答案 0 :(得分:1)

调用函数时,会创建ExecutionContext。这定义了函数环境中的一个重要部分。

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().的回调此值是第一个 call()/apply().
  4. 的论点
  5. 作为构造函数(new myFunction(1,2,3))。这是一个值 myFunction.prototype作为原型的空对象。