网站搜索

为什么向函数传递额外的参数在 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) 并看看会发生什么...