rest参数
ES6引入rest参数(形式为 ...变量名),用于获取函数的多余参数,这样就不需要使arguments对象了,rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
两个
第一个是利用rest参数,来求和,第二个sortNumbers函数也是一样,用来排序
function add(...values) {
let sum = 0;
for (const iterator of values) {
sum += iterator;
}
return sum;
}
console.log(add(1, 2)); // 3
console.log(add(1, 2, 3)); // 6
const sortNumbers = (...numbers) => numbers.sort()
console.log(sortNumbers(6, 4, 7, 1)); //[1, 4, 6, 7]
举个用rest参数改写数组push方法的例子
function pushNumber(array, ...items) {
items.forEach(function(item) {
array.push(item);
})
return array
}
let a = [];
console.log(pushNumber(a, 1, 2, 3)); //[1, 2, 3]
rest之后不可以再有其他参数,否则报错
//报错,rest参数只能是最后面位置
function f(a, ...b, c) {
}
函数的length属性,不包括rest参数
console.log(function(a) {}.length); // 1
console.log(function(...a) {}.length); // 0
console.log(function(c, d, ...a) {}.length); // 2
name属性
函数的name属性,返回该函数的函数名
function foo() {}
console.log(foo.name); // foo
如果一个变量等于一个匿名函数。ES5和ES6的name属性返回不一样
let f = function() {};
//ES5
console.log(f.name); // ""
//ES6
console.log(f.name); // f
Function构造函数返回的函数实例,name属性的值为anonymous
console.log((new Function).name); // anonymous
bind返回的函数,name属性值会加上bound前缀
function foo() {};
console.log(foo.bind({}).name) // bound foo
console.log((function() {}).bind({}).name) // bound