1. 函數參數的默認值函數
ES6 容許爲函數的參數設置默認值,code
function log(x, y = 'World') { console.log(x, y); } log('Hello') // Hello World log('Hello', 'China') // Hello China log('Hello', '') // Hello // 1. 參數變量是默認聲明的,因此不能用 let 或 const 再次聲明 function foo(x = 5) { let x = 1; // error const x = 2; // error } // 2. 使用默認值時,函數不能有同名參數 // 3. 參數默認值不是傳值的,而是每次都從新計算默認值表達式的值 let x = 99; function foo(p = x + 1) { console.log(p); } foo() // 100 x = 100; foo() // 101
2. 與結構賦值默認值結合使用ip
function foo({x, y = 5}) { console.log(x, y); } foo({}) // undefined 5 foo({x: 1}) // 1 5 foo({x: 1, y: 2}) // 1 2 foo() // TypeError: Cannot read property 'x' of undefined // 提供函數默認值 function foo({x, y = 5} = {}) { console.log(x, y); } foo() // undefined 5
3. 參數默認值的位置io
// 例一 function f(x = 1, y) { return [x, y]; } f() // [1, undefined] f(2) // [2, undefined]) f(, 1) // 報錯 f(undefined, 1) // [1, 1] // 例二 function f(x, y = 5, z) { return [x, y, z]; } f() // [undefined, 5, undefined] f(1) // [1, 5, undefined] f(1, ,2) // 報錯 f(1, undefined, 2) // [1, 5, 2]
若是傳入 undefined ,將觸發該參數等於默認值, null 則沒有這個效果console
function foo(x = 5, y = 6) { console.log(x, y); } foo(undefined, null) // 5 null
4. 函數的 length 屬性 是指沒有指定默認值的參數個數function
5. name 屬性class
6. 箭頭函數變量
7. 雙冒號運算符error