ES6学习笔记 —— 函数

一、默认参数

  1. 使用函数默认参数时,不允许有同名参数。
  2. 函数参数尾逗号:允许函数最后一个参数有尾逗号。
  3. 定义了默认值的参数,应该是函数的尾参数,只有在未传递参数,或者参数为 undefined 时,才会使用默认参数,null 值被认为是有效的值传递。
  4. 参数默认值不是传值的,而是每次都重新计算默认值表达式的值。也就是说,参数默认值是惰性求值的。
  5. 参数变量是默认声明的,所以不能用letconst再次声明。
// 报错,不允许有同名参数
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参数

  1. rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
  2. rest参数只能放在参数组的最后,并且有且只有一个不定参数。
  3. 函数的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

 

三、箭头函数

  1. 箭头函数和普通函数的样式不同,箭头函数语法更加简洁、清晰,箭头函数是 =>定义函数,普通函数是 function定义函数
  2. 箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。
  3. 箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。
  4. 箭头函数要返回对象的时候,为了区分于代码块,要用 () 将对象包裹起来
  5. 箭头函数其实是没有 this 的,箭头函数中的 this 只取决包裹箭头函数的第一个普通函数的 this。
  6. 箭头函数体中的 this 对象,是定义函数时的对象,而不是使用函数时的对象。
  7. 不可以当作构造函数,也就是说,不可以对箭头函数使用new命令,否则会抛出一个错误。
  8. 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
  9. 不可以使用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

 

posted @ 2022-05-06 11:38  编程民工  阅读(45)  评论(0编辑  收藏  举报