Web 技术研究所

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

arguments的参数映射问题

  之前的文章“arguments及其子对象”中对这个问题有提到一下,不过当时只做了简单的实验,对于一些特殊情况并没有考虑到。以至于今天自己遇到了这个问题稍微纠结了一下。正常情况下arguments是会映射到函数的形参上的,但是某些特殊情况就映射不上。
  之前的测试代码是这样的 (function(a){
  a="次碳酸钴";
  alert(arguments[0]); //次碳酸钴
})("测试");
  a是函数的第一个参数,它被映射到了arguments[0]上。其实他们是互相映射的,即使我给arguments[0]复制,a的值也可以改变。 (function(a){
  arguments[0]="次碳酸钴";
  alert(a); //次碳酸钴
})("测试");
  但是这依然忽略了一个细节,在这两个测试中我都有传入实参。如果我不传入实参呢? (function(a,b,c){
  c=arguments[1]=arguments[0]="次碳酸钴";
  alert(a); //次碳酸钴
  alert(b); //undefined
  alert(arguments[2]); //undefined
})("测试");
  这个测试中我只传入一个实参给a,没有对b和c传参数。这是只有a会和arguments映射,而b和c都不映射。也就是说arguments和形参映射的条件是必须传入实参。
  总之,arguments的参数映射是个很神奇的特性。有了这个特性,我们只要在arguments上对元素做调整就可以影响参数变量了,比如可以这么用(但是不推荐): function f(lesser,greater){
  [].sort.call(arguments);
  console.log("greater: "+greater);
  console.log("lesser: "+lesser);
};
f(Math.random(),Math.random());
  传入的是随机的两个参数,但对arguments执行sort之后,参数就被排序了,同时映射的变量也受到了影响。
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^