javascript函数对象的[[scope]]属性?

时间:2013-10-04 05:24:01

标签: javascript

好的这是一些代码

function myFunc(){
   var myvar = 8;
       function myFunc2(num){
           alert(myvar+num);
       }

   myFunc2(2);

}

myFunc();

我想清醒一下,如果错了,请纠正我

我已经阅读了堆栈溢出中的所有文章,但我想知道我理解得很好或者我应该阅读更多。

理解幕后发生的事情是in global execution context there it creates function object with the name myFunc`及其[[scope]]属性分配给全局变量对象。

当我调用myFunc时,它会创建自己的执行上下文和激活对象,其中所有函数的参数和函数声明在逐行执行之前被初始化。

当创建内部函数对象时,它的内部[[scope]]属性被赋予其外部执行上下文的变量对象+全局变量对象的值,因此每个函数都创建自己的执行上下文但在此之前每个函数的内部[[scope]首先分配属性。

我已经阅读了堆栈溢出中的所有文章,但我想知道我理解得很好或者我应该阅读更多。

1 个答案:

答案 0 :(得分:1)

以下是基于我对规范的理解以及根据您的解释听起来不清楚的一些指示:

  • 术语“激活对象”在ECMAScript 3中使用,但在当前版本的规范中不再使用。 ES5使用术语“词汇环境”来表示类型(内部类型),其由“环境记录”值组成,并且可能是对外部词汇环境的引用。

  • 由于对外部词汇环境的引用,范围可以被认为是一个链。因此,通过该链发生对外部范围(包括全局范围)的访问。 (当你说“[[scope]]属性被赋予其外部执行上下文的变量对象+全局变量对象的值”时,听起来两个记录都被复制到当前函数的词汇环境中,而不是它如何发生。 )

希望这有帮助!