为什么在没有参数的情况下定义函数时,我可以使用参数调用函数?

jls*_*str 2 javascript

美好的一天!

我偶然发现了一些我在JavaScript领域从未见过的东西,但我想这对于能够更好地了解语言的人来说很容易解释.下面我有以下功能:(代码取自本书:"JavaScript忍者的秘密")

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

正如你所看到的,这个函数是用一个空参数列表定义的,但当我在本书后面看到他们实际上使用这样的函数时,我感到非常困惑......

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

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

最好的祝福,

Eri*_*ert 10

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

从代码示例中可以看出,您可以访问实际使用"arguments"对象传递的参数.

JavaScript的一个设计原则是宽容而不是严格.如果有办法继续前进,JavaScript会继续前进.未能传递足够数量的参数在JavaScript中不会像C#那样被认为是致命的,其中一个设计原则是"通过在编译时失败给开发人员的注意带来可能的错误".