3

このコードを見つけましたが、パラメーターのコメントブロックの目的がわかりません。

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;
  };
}

私の意見では、それは通常の2番目のパラメーターであり、この行は削除される可能性があります。

var thisp = arguments[1];
4

3 に答える 3

1

が定義されている場合Array.prototype.some、元のメソッドには である 2 番目のパラメーターがありましたがthisp、定義されていないため、作成者は機能を模倣する独自のメソッドを定義します。

作成者は、呼び出し元が 2 番目のパラメーターを渡すことを期待していますthisp。HTH。

于 2012-04-29T20:03:10.200 に答える
1

Firefox に組み込まれているの実装でArray.prototype.someは、アリティは 1 です。つまり、1 つの引数を受け入れます。アリティを変更せずに 2 番目のオプション引数を実装するために、置換コードは代わりに 2 番目の引数にアクセスしますarguments[1]

のアリティについて EcmaScript の仕様が何を言おうとしているのか、私は実際には知りませんArray.prototype.some

于 2012-04-29T20:12:38.010 に答える
0

1.関数arguments内で関数を使用するのはコストがかかりundefined、2 。実際のループにとどまることができますが、関数に組み込まれているためです。メソッドは本番コードに含めるべきではないと思います。もう少しテストすると、とにかく2番目のパラメーターが実際に何をするのかは明確ではありません。MDNシムは奇妙なアヒルですが、何かが足りなかったのかもしれません。

于 2012-04-29T20:16:13.370 に答える