004. ES6之函數的擴展

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

相關文章
相關標籤/搜索