这个功能比较简单,但对于后端开发来讲,会以为会奇怪,参数默认值还须要特殊支持么?答案是确定的,在ES5中, 参数是不能够指定默认值的,统一默认为 undefined, 以下代码:javascript
function say(word) { word = word || '呵呵!'; console.log(word); } console.log(say()); //呵呵! console.log(say('哈哈!')); //哈哈!
没错,ES2015以前,咱们只能这么来操做参数默认值,可是在ES2015中,就再也不须要啦,就和普通的后端语言同样:java
function say(word = '呵呵!') { console.log(word); } console.log(say()); //呵呵! console.log(say('哈哈!')); //哈哈!
是否是就这么结束啦?固然不是,回到官方手册上,咱们看到的是:后端
Callee-evaluated default parameter values.lua
参数默认值是被计算过的,意味着,咱们能够写表达式,这个也是其余语言作不到的,看代码:code
function defaultWord() { return '呵呵!'; } function say(word = defaultWord()) { console.log(word); } console.log(say()); //呵呵! console.log(say('哈哈!')); //哈哈!
什么叫evaluated, 其实也就是在应用默认值的时候,至关于JavaScript编译器使用eval计算一下,出来的结果看成默认值:ip
function say(word = eval('"呵呵!"')) { console.log(word); }
和后端开发
function say(word = eval('defaultWord()')) { console.log(word); }
还有:开发
Default parameters are available to later default parameters.编译器
有默认值的参数,对其后面的参数可用,啥意思?看代码:io
function renderScore(name, score = 100, description = (score === 100 ? '(好棒)' : '')) { console.log(name + '得分: ' + score + description); } renderScore('小明'); renderScore('小花', 80); renderScore('小静', 100); renderScore('小强', 90, '(加油哦!)');
结果为:
> 小明得分: 100(好棒) > 小花得分: 80 > 小静得分: 100(好棒) > 小强得分: 90(加油哦!)
这样,你们都应该清楚了吧?