为什么将额外的参数传递给函数在JavaScript中有效?

时间:2017-11-02 20:15:13

标签: javascript function

假设我已经定义了一个函数:

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?')

2 个答案:

答案 0 :(得分:1)

无论函数的定义如何,您都可以使用任意数量的参数调用Javascript函数。

任何未通过的命名参数都将是未定义的。

Javascript将您的参数视为数组。更具体地说,它是arguments数组,函数声明中的命名参数只是指向arguments成员的指针。更多信息here

答案 1 :(得分:0)

定义函数时,您为其指定了一个参数x

该语言旨在为每个参数查找单个参数,而忽略其他参数。

但是,您可以通过特殊的arguments对象访问其他参数。

尝试在功能体中输入console.log(arguments),看看会发生什么......