为什么向函数传递额外的参数在 JavaScript 中有效?
假设我已经定义了一个函数:
function myAwesomeFunction(x){
console.log(x);
}
现在,我期望的是,如果我这样调用它:myAwesomeFunction(1) 或 myAwesomeFunction('lol') 或 myAwesomeFunction('whatever'),它会正常工作,而且确实如此。
但是它是如何工作的,即使我向函数传递额外的参数,它也只会忽略除第一个之外的所有参数:
myAwesomeFunction('why so', 'serious?')
我们在上面的函数中甚至没有任何可选参数吗?(即,像 (x, y='') 这样的)
function myAwesomeFunction(x){
console.log(x);
}
myAwesomeFunction(1);
myAwesomeFunction('lol');
myAwesomeFunction('whatever');
myAwesomeFunction('why so', 'serious?')
myAwesomeFunction('why', 'so', 'serious?')答案#1
你可以调用一个 Javascript 函数,并传入任意数量的参数,而不管函数的定义如何。
任何未传递的命名参数将是未定义的。
Javascript 将你的参数视为一个数组。更具体地说,它是 arguments 数组,函数声明中的命名参数只是指向 arguments 成员的指针。更多信息请点击这里
答案#2
当你定义函数时,你给它一个参数 x
这种语言被设计用于为每个参数寻找一个参数值,并忽略其他参数。
然而,你可以通过特殊的 arguments 对象访问其他参数。
尝试在你的函数体内输入 console.log(arguments) 并看看会发生什么...