pr1*_*001 50 javascript arrays arguments function
因为它看起来像人做的是转换的第一件事arguments变成一个真正的数组,我感兴趣的是,为什么Javascript语言的作者和实施者决定,并继续认为,这arguments应该不是一个真正的Array.我并不是说这是火炬,我真诚地对它背后的思想感兴趣.由于函数在你身体时自然被调用,我不认为这是因为arguments引用的对象可以改变,就像一些DOM结果一样......
CMS*_*CMS 44
我的猜想:
arguments对象的概念从一开始就一直在语言上,甚至在ECMAScript第一版标准(PDF)中也有描述.
在那个版本的ECMAScript中,这Array.prototype是非常基本的,数组对象只包含4个方法!:toString,join,reverse和sort.
我认为这是他们arguments继承的主要原因之一Object.prototype,那时候那些Array方法看起来并不太有用.
但Array.prototype对象是在标准的下一个版本的扩展,现在ES5,Array对象有方法,例如map,reduce,every,some,等等,这是真的很强大.
去年,在标准草案的草案阶段,ES5中有一项建议arguments继承Array.prototype,但后来被撤销.
在这些草案中,arguments继承自Array.prototype,但为了向后兼容ES3,该arguments对象定义了两个自己的属性,toString并且toLocaleString都指向相同的方法Object.prototype,但最后,委员会决定继续继承Object.prototype.
Dan*_*llo 28
arguments对象具有非常不寻常的特性,它的类数组元素是包含函数参数的局部变量的同义词.例如:
function f(x) {
console.log(arguments[0]); // Displays the initial value of the argument x
x = 5; // Changes the value of the local variable x
console.log(arguments[0]); // Now displays 5
}
Run Code Online (Sandbox Code Playgroud)
我总觉得这种"神奇的行为" arguments是不是阵列的原因.
重要的是要注意,如果没有设计师出现,我们只能猜测为什么.但我们可以提出一些正当理由......这是我的:
从函数的角度来看,一个原因可能是因为你不能 - 显然 - 实际上改变传递给你的参数.您可以更改一个表示传递给您的参数的数组,但是在您收到执行范围之前,传递的参数是一成不变的.
你可以拼接,骰子和弹出数组,如果你对arguments对象做了那么你只是毁了概念上是一个不可变的结构(悲伤的脸!).真正的参数对象的设计更接近于JavaScript可以提供的一种不变性.
它类似于查询字符串参数.您将收到发送请求的客户收集的集合.它是请求信息的一部分,已经设置完成.