假设我有以下代码(完全没用,我知道)

function add( a, b, c, d ) {
  alert(a+b+c+d);
}

function proxy() {
    add.apply(window, arguments);
}

proxy(1,2,3,4);

基本上,我们知道apply期望将数组作为第二个参数,但是我们也知道arguments不是适当的数组。该代码按预期工作,因此可以肯定地说我可以将任何类似数组的对象作为apply()中的第二个参数传递吗?

以下内容也将起作用(至少在Chrome中):
function proxy() {
  add.apply(window, {
    0: arguments[0],
    1: arguments[1],
    2: arguments[2],
    3: arguments[3],
    length: 4
  });
}

更新:似乎我的第二个代码块在IE arguments)有效。
错误是Array or arguments object expected,因此我们可以得出结论,传递arguments总是安全的,而在oldIE中传递类似数组的对象则不安全。

最佳答案

假设ECMAScript 5.1:是。根据ECMA-262,10.6,arguments对象具有15.3.4.3(length)所需的Function.prototype.apply和index属性。

关于javascript - 将 'arguments'传递给 'apply()'是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16543692/

10-13 03:13