ES2015入门系列4-参数默认值

这个功能比较简单,但对于后端开发来说,会觉得会奇怪,参数默认值还需要特殊支持么?答案是肯定的,在ES5中, 参数是不可以指定默认值的,统一默认为 undefined, 如下代码:

1
2
3
4
5
6
7
function say(word) {
word = word || '呵呵!';
console.log(word);
}

console.log(say()); //呵呵!
console.log(say('哈哈!')); //哈哈!

没错,ES2015之前,我们只能这么来操作参数默认值,但是在ES2015中,就不再需要啦,就和普通的后端语言一样:

1
2
3
4
5
6
function say(word = '呵呵!') {
console.log(word);
}

console.log(say()); //呵呵!
console.log(say('哈哈!')); //哈哈!

是不是就这么结束啦?当然不是,回到官方手册上,我们看到的是:

Callee-evaluated default parameter values.

参数默认值是被计算过的,意味着,我们可以写表达式,这个也是其他语言做不到的,看代码:

1
2
3
4
5
6
7
8
9
10
function defaultWord() {
return '呵呵!';
}

function say(word = defaultWord()) {
console.log(word);
}

console.log(say()); //呵呵!
console.log(say('哈哈!')); //哈哈!

什么叫evaluated, 其实也就是在应用默认值的时候,相当于JavaScript编译器使用eval计算一下,出来的结果当作默认值:

1
2
3
function say(word = eval('"呵呵!"')) {
console.log(word);
}

1
2
3
function say(word = eval('defaultWord()')) {
console.log(word);
}

还有:

Default parameters are available to later default parameters.

有默认值的参数,对其后面的参数可用,啥意思?看代码:

1
2
3
4
5
6
7
function renderScore(name, score = 100, description = (score === 100 ? '(好棒)' : '')) {
console.log(name + '得分: ' + score + description);
}
renderScore('小明');
renderScore('小花', 80);
renderScore('小静', 100);
renderScore('小强', 90, '(加油哦!)');

结果为:

1
2
3
4
> 小明得分: 100(好棒)
> 小花得分: 80
> 小静得分: 100(好棒)
> 小强得分: 90(加油哦!)

这样,大家都应该清楚了吧?

本文使用「CC BY 4.0」创作共享协议,只要在使用时署名,您可以对本文进行转载、节选、混编、二次创作,并允许商业性使用。
本文为作者原创,如果您认为本文对您有帮助,欢迎打赏作者