如这样一段代码
function test(arg1,arg2){
var aa = "aa";
var bb = "bb";
var cc = "cc";
         functio dd(){}
}
test(1,2);当函数test定义的时候
听说 这个函数会自动创建一个[[scope]]的属性,  我可以理解成test.scope =XXXXXX吗?????;
这个属性不能访问           firefox下可以用__parent__访问   可以理解成 test.scope == test.__parent__ 吗??
因为 test是全局变量  所以  [[scope]]只是指向全局活动对象window active object.(我觉得这个应该是对的)..//-------------------------------------------------------------------------------------------------------当执行test的时候
会创建一个活动对象(我假设为ActiveObj)
并创建arguments属性, 然后会给这个对象添加俩个命名属性ActiveObj.lps, ActiveObj.rps;
然后把函数里面的变量和函数都当成活动对象的属性
所以我觉得 活动对象就变成了这样
{
    arguments:[arg1,arg2], //
    lps: ,
    rps: ,
    aa : "aa",
    bb : "bb",
    cc : "cc",
    dd : function(){}
}
这么理解应该可以吧..........................................................然后将这个活动对象做为此时的作用域链(scope chain)最前端, 并将这个函数对象的[[scope]]加入到scope chain
这个就不大懂了另外 看了下 scope chainScope Chain开始时被设为宿主对象,所以在全局代码中的变量就是宿主对象的属性。Scope Chain在执行时由JS引擎自动维护,编译型的引擎也会创建相应的运行时环境来做此事。Scope Chain一般在函数调用或者执行进入with块的时候改变。什么是把 活动对象放在作用域链的最前端啊????上面是对网上看到的一些文章的理解 以及不确定的地方
拿出来 希望大家能够指教下  或者讨论 下    不管什么样的理解都行   讨论讨论

解决方案 »

  1.   

    参考一下这里:http://www.jslab.org.cn/?tag=ScopeChainAndClosure
      

  2.   


    你那篇跟网上的差不多
    up!~我最不理解的地方是
    将函数的活动对象的放到作用域链的最前端Scope Chain是一个链表
    Scope Chain开始时被设为宿主对象
    Scope Chain  谁可以用伪代码表示一下.............
      

  3.   

    其实你可以这样去理解(描述可能非正式,只作参考):函数声明的时候(设为宿主对象)函数执行的时候(将函数的活动对象的放到作用域链的最前端 )看到WINTER说,貌似在ECMAScript262-5中对作用域(链)有更直接明了的解释!