学习 JavaScript 函数参数的基础知识。

函数可以接受一个或多个参数。

const dosomething = () => {
 //做些事情
}

const dosomethingElse = foo => {
 //做些事情
}

const dosomethingElseAgain = (foo, bar) => {
 //做些事情
}

ES6/ES2015 开始,函数的参数可以有默认值:

const dosomething = (foo = 1, bar = 'hey') => {
 //做些事情
}

这样你就可以在调用函数时不填充所有参数:

dosomething(3)
dosomething()

ES2018 引入了参数的尾随逗号,这个特性有助于减少由于移动参数导致的缺少逗号而引起的 bug(例如,将最后一个参数移动到中间时):

const dosomething = (foo = 1, bar = 'hey',) => {
 //做些事情
}

dosomething(2, 'ho!')

在最后一个参数后面加上逗号来调用函数也是可以的:

dosomething(2, 'ho!',)

你可以将所有参数包装在数组中,并在调用函数时使用 扩展运算符

const dosomething = (foo = 1, bar = 'hey') => {
 //做些事情
}
const args = [2, 'ho!']
dosomething(...args)

对于很多参数,记住参数的顺序可能很困难。使用对象和解构赋值可以保持参数的名称:

const dosomething = ({ foo = 1, bar = 'hey' }) => {
 //做些事情
 console.log(foo) // 2
 console.log(bar) // 'ho!'
}
const args = { foo: 2, bar: 'ho!' }
dosomething(args)

函数现在支持默认参数:

const foo = function(index = 0, testing = true) { /* ... */ }
foo()

默认参数值是在 ES2015 中引入的,并在现代浏览器中被广泛实现。

这是一个接受 param1 参数的 doSomething 函数。

const doSomething = (param1) => {

}

如果在调用函数时没有指定参数,我们可以为 param1 添加一个默认值:

const doSomething = (param1 = 'test') => {

}

当然,对于更多的参数也适用:

const doSomething = (param1 = 'test', param2 = 'test2') => {

}

如果你有一个包含参数值的唯一对象呢?

很久很久以前,如果我们需要将一个选项对象传递给一个函数,以便在其中具有默认值,如果其中一个是未定义的,你必须在函数内部添加一些代码:

const colorize = (options) => {
 if (!options) {
 options = {}
 }

 const color = ('color' in options) ? options.color : 'yellow'
 ...
}

使用对象解构可以提供默认值,从而简化了代码:

const colorize = ({ color = 'yellow' }) => {
 ...
}

如果在调用我们的 colorize 函数时没有传递对象,我们同样可以默认分配一个空对象:

const spin = ({ color = 'yellow' } = {}) => {
 ...
}