ES6 箭头函数

Posted MikrokosmosRun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6 箭头函数相关的知识,希望对你有一定的参考价值。

文章目录


一、箭头函数是什么?

let fun = (a) => 
    console.log(a)
;

等同于

let fun = function (a) 
    console.log(a)
;

二、箭头函数的语法

1.参数

没有参数:写一个空括号

let fun1 = () => 
    console.log(111);
;

参数只有一个:可以省去包裹参数的括号

let fun2 = name => 
    console.log(`Hello $name !`)
;

多个参数:将参数依次用逗号隔开

let fun3 = (val1, val2, val3) => 
    return [val1, val2, val3];
;

2.函数体

如果函数体只有一句代码,简单的返回某个变量或者返回一个简单的js表达式,可以省去大括号

let show = val => val;
// 等同于
let show = function (val)  return val ;
let sum = (num1, num2) => num1 + num2;
// 等同于
let sum = function(num1, num2) 
  return num1 + num2;
;

如果函数体只有一条语句并且不需要返回值(如:调用一个函数),可以给这个语句前面加一个void关键字。

let fn = () => void notReturn();

由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象会报错,可以在对象外面加上圆括号。

let obj = () => key:0,value:1;
obj();//Uncaught SyntaxError: Unexpected token :

//解决方法:
let obj = () => (key:0,value:1);
obj();//key:0,value:1

注意:() => 在谷歌浏览器不会报错,会解释为代码块中没执行语句。

let obj = () => ;
obj();//
let obj0 = () => ();
obj0();//

三、箭头函数与普通函数的区别

1、语法更加简洁、清晰

2、箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this

3、箭头函数继承而来的this指向永远不变

4、.call()/.apply()/.bind()无法改变箭头函数中this的指向

5、箭头函数不能作为构造函数使用

let Add = () => ;
let a = new Add();
a();//Uncaught TypeError: Add is not a constructor

6、箭头函数没有自己的arguments,可以在箭头函数中使用rest参数代替arguments对象,来访问箭头函数的参数列表

//ES5:
var add = function(a,b)console.log(arguments);
add(1,2);//[1, 2, callee: ƒ, Symbol(Symbol.iterator): ƒ]

//ES6:
let sum = (a,b) => console.log(arguments);
sum(1,2);//Uncaught ReferenceError: arguments is not defined

//解决方法:
let sum = (...rest) => console.log(rest);
sum(1,2);//[1, 2]

7、箭头函数没有原型prototype

8、箭头函数不能用作Generator函数,不能使用yeild关键字

9、箭头函数不具有super,不具有new.target

以上是关于ES6 箭头函数的主要内容,如果未能解决你的问题,请参考以下文章

ES6 箭头函数

ES6箭头函数基本用法

es6学习笔记--箭头函数

ES6学习笔记之箭头函数

ES6学习笔记之箭头函数

每个[重复]的es6箭头函数中的花括号