Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

严格模式阻止了arguments的映射

  在普通模式下,函数的arguments与其参数列表中定义的变量都是存在映射关系。只要修改其中一个,另一个也会跟着改变,这个特性在以前的文章中介绍过。但是在严格模式下arguments的很多特性都被抛弃了,它已经被弱化到连Array都不如了,这不是很混蛋吗?
  直接做个测试吧
<script>
var f=function(a,b,c,d){
  "use strict";
  for(var i=0;i<4;i++)arguments[i]=i+1;
  console.log("a="+a); 
  console.log("b="+b);
  console.log("c="+c);
  console.log("d="+d);
},g=eval(("("+f+")").replace("use",""));

console.log("严格模式");
f.apply(null,new String("次碳酸钴"));
console.log("普通模式");
g.apply(null,new String("次碳酸钴"));
</script>

  这里偷了个懒,没把函数重新定义一遍,而是取出先前定义的函数代码,把里面的严格模式声明符破坏掉后重新生成一个函数。代码中使用一个循环来把arguments上的的下标元素全部赋值了。严格模式下这个操作只会影响到arguments自身,参数变量依然保持传入时的值。而普通模式下由于对arguments的操作会映射到参数变量上,所以这些参数变量就变成了我们循环时赋的值。
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^