ECMAScript-----(四)函数的扩展
参数的默认值
- 用途:
- 说明:
- 注意:
- 有默认值的参数需要写在参数的最后面,写在有默认值参数后面的参数不可省略
- 函数的length属性,在函数参数有默认值时会失真,不会计算有默认值的参数
- 默认值是变量时,作用域优先当前函数,其次才是全局作用域
- 例子:
//与解构赋值结合 // 写法一 function m1({x = 0, y = 0} = {}) { return [x, y]; } // 写法二 function m2({x, y} = { x: 0, y: 0 }) { return [x, y]; }
// 函数没有参数的情况 m1() // [0, 0] m2() // [0, 0] // x和y都有值的情况 m1({x: 3, y: 8}) // [3, 8] m2({x: 3, y: 8}) // [3, 8] // x有值,y无值的情况 m1({x: 3}) // [3, 0] m2({x: 3}) // [3, undefined] // x和y都无值的情况 m1({}) // [0, 0]; m2({}) // [undefined, undefined] m1({z: 3}) // [0, 0] m2({z: 3}) // [undefined, undefined]//有默认值的函数,当穿undefined时会触发默认值,传null时不会触发默认值,即使null function foo(x = 5, y = 6) { console.log(x, y); } foo(undefined, null) // 5 null
扩展运算符(spread)
- 用途:将一个数组转为用逗号分隔的参数序列,主要用于函数调用,当作函数参数
- 说明:
- 注意:扩展运算符作参数时,需要置于参数最后一位,否则会报错
- 例子:
//用于函数调用 function push(array, ...items) { array.push(...items); }
//用于求数组最大值 let arr = [14,3,24] Math.max(...arr)
//用于合并数组 var arr1 = [0, 1, 2]; var arr2 = [3, 4, 5]; arr1.push(...arr2); //或者 [...arr1, ...arr2]
箭头函数
- 用途:
- 说明:
- 注意:this指向定义时所在的对象,而不是使用时所在的对象
- 例子:
var sum = (num1, num2) => num1 + num2; //等同于 var sum = function(num1, num2) { return num1 + num2; };
const full = ({ first, last }) => first + ' ' + last; //等同于 function full(person) { return person.first + ' ' + person.last; }
const isEven = n => n % 2 == 0; const square = n => n * n;