为什么注释块中的第二个函数参数?只是好奇

时间:2012-04-29 19:57:45

标签: javascript function parameters comments

我发现了这段代码,我不理解参数中注释块的用途:

if (!Array.prototype.some)
{
  Array.prototype.some = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this && fun.call(thisp, this[i], i, this))
        return true;
    }

    return false;
  };
}

在我看来,它可能是正常的第二个参数,然后可以删除此行:

var thisp = arguments[1];

3 个答案:

答案 0 :(得分:1)

如果定义了Array.prototype.some,则原始方法有第二个参数thisp,但由于未定义,因此作者定义了他/她自己的模拟功能的方法。

作者希望调用者传递第二个参数thisp。 HTH。

答案 1 :(得分:1)

Firefox内置的Array.prototype.some实现的arity为1,即它接受一个参数。为了在不改变arity的情况下实现第二个可选参数,替换代码通过arguments[1]访问第二个参数。

我实际上并不知道EcmaScript规范对Array.prototype.some的arity所说的内容。

答案 2 :(得分:0)

你是对的,它应该是一个参数,因为1.在函数中使用函数argumentsexpensive和2.它是硬连线到函数中,尽管它可以保持{{1在实际循环中。我会说,该方法不应该是生产代码。再测试一下,不清楚第二个参数实际上是做什么的。 MDN shim是一只奇怪的鸭子,但也许我错过了什么。