ES2015入門系列4-參數默認值

這個功能比較簡單,但對於後端開發來講,會以爲會奇怪,參數默認值還須要特殊支持麼?答案是確定的,在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(加油哦!)

這樣,你們都應該清楚了吧?

相關文章
相關標籤/搜索