美好的一天!
我偶然发现了一些我从未在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, " "));
}
}
}
正如你所看到的,这个函数是用一个空的参数列表定义的,但是当我在本书的后面看到他们实际上使用了这样的函数时,我感到非常困惑......
var x = 213;
log(x); //Hmmm, I thought this function had an empty parameter list.
有人可以向我解释一下,为什么这个函数调用允许/可能?支持此功能的JS涉及哪些概念?提前谢谢,我很困惑。
最诚挚的问候,
答案 0 :(得分:10)
您可以根据需要使用错误数量的参数调用函数。多余的参数将被忽略;缺少的参数将被赋予默认值。
从代码示例中可以看出,您可以访问实际使用“arguments”对象传递的参数。
JavaScript的一个设计原则是宽容而不是严格。如果有办法继续前进,JavaScript会继续前进。未能传递足够数量的参数在JavaScript中不会像C#那样被认为是致命的,其中一个设计原则是“在编译时失败会给开发人员的注意带来错误”。
答案 1 :(得分:2)
Javascript函数有一个隐式arguments
参数,它是一个具有length属性的类数组对象。
您可以使用log
方法。
function log(){
alert(arguments[0]);
alert(arguments[1]);
}
你可以拨打日志。
log("first","second");
答案 2 :(得分:1)
JavaScript函数是variadic,即它们可以采用任意且无限量的参数。您可以通过arguments
object访问它们,并通过apply
传入可变数量的值。形式参数列表只声明了一些指向参数的变量名称,如果给定的参数少于定义的参数名称,则默认为undefined
。
答案 3 :(得分:1)
JavaScript允许您使用任意数量的参数调用函数,但如果您想要更严格的函数,则TypeScript。
它可以防止不正确的方法调用和许多其他JavaScript愚蠢。