ES6笔记 - 函数的扩展

函数参数的默认值


ES6允许为函数的参数设置默认值,即直接写在参数定义的后面。

function log(x, y = 'World') { 
  console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello

与解构赋值默认值结合使用


参数默认值可以与解构赋值的默认值,结合起来使用。

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

函数的length属性


指定了默认值以后,函数的length
属性,将返回没有指定默认值的参数个数。也就是说,指定了默认值后,length属性将失真。

(function (a) {}).length // 1
(function (a = 5) {}).length // 0
(function (a, b, c = 5) {}).length // 2

rest参数


ES6引入rest参数(形式为“...变量名”),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

function add(...values) { 
  let sum = 0; 
  for (var val of values) { 
    sum += val; 
  } 
  return sum;
}
add(2, 5, 3) // 10

//给一个组数字sort排序
// arguments变量的写法ES5
function sortNumbers() { 
  return Array.prototype.slice.call(arguments).sort();
}
// rest参数的写法ES6
const sortNumbers = (...numbers) => numbers.sort();

//下面是一个利用rest参数改写数组push方法的例子。
function push(array, ...items) { 
  items.forEach(function(item) { 
    array.push(item); 
    console.log(item); 
  });
}
var a = [];
push(a, 1, 2, 3)

//注意,rest参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。
// 报错
function f(a, ...b, c) {  // ...}

你可能感兴趣的:(ES6笔记 - 函数的扩展)