scope chain and call object

wtcsy 2010-01-29 02:10:44
如这样一段代码
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块的时候改变。

什么是把 活动对象放在作用域链的最前端啊????

上面是对网上看到的一些文章的理解 以及不确定的地方
拿出来 希望大家能够指教下 或者讨论 下 不管什么样的理解都行 讨论讨论


...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dh20156 2010-02-01
  • 打赏
  • 举报
回复
其实你可以这样去理解(描述可能非正式,只作参考):

函数声明的时候(设为宿主对象)

函数执行的时候(将函数的活动对象的放到作用域链的最前端 )

看到WINTER说,貌似在ECMAScript262-5中对作用域(链)有更直接明了的解释!
wtcsy 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dh20156 的回复:]
囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧
[/Quote]

你那篇跟网上的差不多


up!~

我最不理解的地方是
将函数的活动对象的放到作用域链的最前端

Scope Chain是一个链表
Scope Chain开始时被设为宿主对象
Scope Chain 谁可以用伪代码表示一下.............
dh20156 2010-01-29
  • 打赏
  • 举报
回复
luohuayh 2010-01-29
  • 打赏
  • 举报
回复
路过,学习!
sunxing007 2010-01-29
  • 打赏
  • 举报
回复
上海今天还比较舒服。。。
wtcsy 2010-01-29
  • 打赏
  • 举报
回复



深圳的冬天真冷..............
sunxing007 2010-01-29
  • 打赏
  • 举报
回复
刚吃药,头疼。懒得想。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧