点此查看完整干净版本: JavaScript作用域的迷惑题(arguments运行时状态更改)


中华图网 -> 网页设计交流 -> JavaScript作用域的迷惑题(arguments运行时状态更改) 登录 -> 注册 -> 回复主题 -> 发表主题


越兔 2008-08-21 10:00

转于石头君BLOG:http://www.v-ec.com/dh20156/article.asp?id=179

好奇同学给出的一段代码,很具有迷惑性。
Code:

[可以先修改代码再运行]

说说看,你猜测的结果是什么?

好吧,Run一遍吧,结果是:
Quote:

1
null
2
null


我开始也对这个结果感到奇怪。按照词法作用域的定义,函数d是运行在它被定义的作用域里的,它访问a.arguments应该是window.a.arguments,本以为它会访问到一个静态的a.arguments,即null,没想到居然访问到了a在运行时状态下的arguments。

原来,在d执行时,a的状态已经被更改,它处在一个运行时状态,这个时候window.a.arguments也被更改了,直到a运行结束,window.a.arguments才被重新更新。这样,也就有了上题的结果。

所以,对作用域的理解是没有问题的,主要是arguments的运行时状态更改值得注意!

另外,函数的arguments属性是只读的(arguments成员是可读写的,参见http://www.v-ec.com/dh20156/article.asp?id=141
Code:

[可以先修改代码再运行]


我们暂且认为,函数的arguments属性在该函数未运行状态下只是一个对象占位符(null),WC认为,也有可能是一种类似perl的local的实现。

只有在函数运行时,不论该函数是否有参数,arguments才会转换为一个实际的对象,运行结束后,又恢复到null状态。


查看完整干净版本: JavaScript作用域的迷惑题(arguments运行时状态更改)

Powered by Cntuw.com Time 0.313388 second(s),query:3 Gzip enabled

You can

|