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