如这样一段代码
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 chain
Scope Chain开始时被设为宿主对象,所以在全局代码中的变量就是宿主对象的属性。Scope Chain在执行时由JS引擎自动维护,编译型的引擎也会创建相应的运行时环境来做此事。Scope Chain一般在函数调用或者执行进入with块的时候改变。
什么是把 活动对象放在作用域链的最前端啊????
上面是对网上看到的一些文章的理解 以及不确定的地方
拿出来 希望大家能够指教下 或者讨论 下 不管什么样的理解都行 讨论讨论