函数的扩展
1.rest参数
ES6 引入 rest 参数(形式为…变量名)
用于获取函数的多余参数,这样就不需要使用arguments对象了。
rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
let arr=[1,2,3,4];
let jonson ={
a:1,
b:"等于二",
c:3
}
console.log(...arr) //输出 1 2 3 4
// console.log(...jonson)//json对象 不能用
function sum(...aaa){
console.log(aaa) //输出 [2,1,3]
}
sum(2,1,3)
2.name 属性
函数的name属性,返回该函数的函数名。
function foo(){
}
console.log(foo.name) //输出 foo
//变量ff等于一个匿名函数,ES5 和 ES6 的name属性返回的值不一样
var ff = function(){
}
console.log(ff.name) //es6 输出ff es5输出""
//将一个具名函数赋值给一个变量,则 ES5 和 ES6 的name属性都返回这个具名函数原本的名字。
var hasname = function has(){
}
console.log(hasname.name)//es5 es6 都输出has
3.箭头函数
ES6 允许使用“箭头”(=>)定义函数。
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
上面四点中,第一点尤其值得注意。this对象的指向是可变的,但是在箭头函数中,它是固定的。
var f = () => 5;
//等同于
var f = function () {
return 5
}
var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
return num1 + num2;
};
const numbers = (...nums) => nums;
numbers(1, 2, 3, 4, 5)
console.log(numbers(1, 2, 3, 4, 5)) //输出 [1, 2, 3, 4, 5]
//this
var id = 10;
let json ={
id:1,
show:function(){
// setTimeout(function(){
// 10 此时this指向window var定义全局 属于window
// console.log(this.id)
// },2000)
setTimeout(()=>{
//1 此时箭头函数 的this指向定义时所在的对象
console.log(this.id)
},)
}
}
json.show()