javascript是否允许别名评估?以下代码的第一部分意外行为(显示1,1),但第二部分不行(显示1,2).对ECMA脚本或mozilla文档的引用将有所帮助,我找不到一个.
<html>
<script type="application/javascript;version=1.8">
(function(){
eval('var testVar=1');
alert(testVar);
var eval2=eval;
eval2('var testVar=2');
alert(testVar);
})();
(function(){
eval('var testVar=1');
alert(testVar);
eval('var testVar=2');
alert(testVar);
})();
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
你不能"别名" eval并期望它的行为相同.就那么简单.为什么?eval不是一个功能.
发生的事情是,当您调用时eval2,您正在设置变量"cache"以使用全局变量.因此,通过在其中设置变量,您将设置全局变量.但是,在退出时,变量"cache"返回到函数作用域.这就是为什么第二个alert显示1 - 全局变量被功能级别1遮蔽.
这在ECMAScript的附件E(第239页)中有所说明(强调我的)
10.4.2:在第5版中,对eval函数的间接调用使用全局环境作为 eval代码的变量环境和词法环境.在第3版中,间接eval的调用者的变量和词法环境被用作eval代码的环境.
"输入评估代码"的完整定义在§10.5.2(第58页)中定义(强调我的)
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |