我发现了这段代码,我不理解参数中注释块的用途:
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];
答案 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)