ES6学习笔记 —— 函数
一、默认参数
- 使用函数默认参数时,不允许有同名参数。
- 函数参数尾逗号:允许函数最后一个参数有尾逗号。
- 定义了默认值的参数,应该是函数的尾参数,只有在未传递参数,或者参数为 undefined 时,才会使用默认参数,null 值被认为是有效的值传递。
- 参数默认值不是传值的,而是每次都重新计算默认值表达式的值。也就是说,参数默认值是惰性求值的。
- 参数变量是默认声明的,所以不能用
let或const再次声明。
// 报错,不允许有同名参数
function fn(x,x,y=17){
console.log(y);
}
//非尾部的参数设置默认值,这个参数是没法省略的
function f(x = 1, y) {
return [x, y];
}
f() // [1, undefined]
f(2) // [2, undefined]
f(, 1) // 报错
// null不触发默认值 function fn(x,y=17){ console.log(x,y); } fn(1,null) //1 null //不能用let或const再次声明 function foo(x = 5) { let x = 1; // error const x = 2; // error }
二、rest参数
- rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
- rest参数只能放在参数组的最后,并且有且只有一个不定参数。
- 函数的
length属性,不包括 rest 参数。
//rest 参数搭配的变量是一个数组
fn(...values){
console.log(values)
}
this.fn(1,2) //[1,2]
this.fn(1,2,3,4) //[1,2,3,4]
// 报错,rest数只能放在参数组的最后
fn(a, ...b, c) {
// ...
}
//函数的length属性,不包括 rest 参数
(function(a) {}).length // 1
(function(...a) {}).length // 0
(function(a, ...b) {}).length // 1
三、箭头函数
- 箭头函数和普通函数的样式不同,箭头函数语法更加简洁、清晰,箭头函数是 =>定义函数,普通函数是 function定义函数。
- 箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。
- 箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用
return语句返回。 - 箭头函数要返回对象的时候,为了区分于代码块,要用 () 将对象包裹起来。
- 箭头函数其实是没有 this 的,箭头函数中的 this 只取决包裹箭头函数的第一个普通函数的 this。
- 箭头函数体中的 this 对象,是定义函数时的对象,而不是使用函数时的对象。
- 不可以当作构造函数,也就是说,不可以对箭头函数使用
new命令,否则会抛出一个错误。 - 不可以使用
arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。 - 不可以使用
yield命令,因此箭头函数不能用作 Generator 函数。
//1.箭头函数
var f = v => v;
//2.箭头函数不需要参数或需要多个参数
var f = () => 5;
var f = (a,b) => a+b;
//3.箭头函数的代码块部分多于一条语句
var sum = (num1, num2) => { return num1 + num2; }
//4.返回一个对象
let getTempItem = id => ({ id: id, name: "Temp" });
//箭头函数只有一行语句,且不需要返回值
let fn = () => void doesNotReturn();
//6.箭头函数体中的 this 对象,是定义函数时的对象,而不是使用函数时的对象。
function fn(){
setTimeout(()=>{
// 定义时,this 绑定的是 fn 中的 this 对象
console.log(this.a);
},0)
}
var a = 20;
// fn 的 this 对象为 {a: 18}
fn.call({a: 18}); // 18
学习网站地址:http://caibaojian.com/es6/destructuring.html