2

再会!

我偶然发现了在 JavaScript 领域从未见过的东西,但我想对于更了解该语言的人来说,这很容易解释。下面我有以下功能:(取自书中的代码:“JavaScript Ninja 的秘密”)

function log() {
  try {
    console.log.apply(console, arguments);
  }
  catch(e) {
    try {
      opera.postError.apply(opera, arguments);
    }
    catch(e) {
      alert(Array.prototype.join.call(arguments, " "));
    }
  }
}

如您所见,该函数是用一个空参数列表定义的,但是当我在本书后面看到他们实际上像这样使用所述函数时,我完全感到困惑......

var x = 213;
log(x); //Hmmm, I thought this function had an empty parameter list.

有人可以向我解释一下,为什么允许/可能调用该函数?支持此功能的 JS 中涉及哪些概念?提前谢谢,我很困惑。

此致,

4

4 回答 4

10

您可以根据需要调用具有错误数量参数的函数。多余的参数将被忽略;缺少的参数将被赋予一个默认值。

正如您从代码示例中看到的那样,您可以访问实际使用“参数”对象传递的参数。

JavaScript 的设计原则之一是宽容而不是严格。如果有办法继续前进,JavaScript 就会继续前进。未能传递足够数量的参数在 JavaScript 中并不像在 C# 这样的语言中那样被认为是致命的,其中设计原则之一是“通过在编译时失败将可能的错误引起开发人员的注意”。

于 2013-03-10T15:32:21.693 回答
2

Javascript 函数有一个隐式arguments参数,它是一个具有长度属性的类数组对象。

log可以做的方法。

function log(){

  alert(arguments[0]); 

  alert(arguments[1]);

}

你可以调用日志。

log("first","second");
于 2013-03-10T15:32:37.263 回答
1

JavaScript 函数是可变参数的,即它们可以接受任意且无限数量的参数。您可以通过argumentsobject访问它们,并通过传递可变数量的值apply。形参列表只是声明了一些变量名,它们是指向参数的指针,如果给定的参数少于定义的参数名,它们将默认为undefined.

于 2013-03-10T15:37:48.053 回答
1

JavaScript 允许您使用任意数量的参数调用函数,但如果您想要更严格的东西,可以使用TypeScript

它可以防止不正确的方法调用和许多其他 JavaScript 愚蠢行为。

于 2013-03-12T17:52:38.537 回答