转载自:https://segmentfault.com/a/1190000004470909
侵删!
定义一个箭头函数很简单,基本语法是:
- ([param] [, param]) => {
- statements
- }
- param => expression
param 是参数,根据参数个数不同,分这几种情况:
() => {...} // 零个参数用 () 表示;
x => {...} // 一个参数可以省略 ();
(x, y) => {...} // 多参数不能省略 ();
当然,和普通函数一样,箭头函数也可以使用 ES6 新增的「默认参数」和「剩余参数」( Firefox15+ 开始支持):
- var func1 = (x = 1, y = 2) = >x + y;
- func1(); // 得到 3
- var func2 = (x, ...args) = >{
- console.log(args)
- };
- func2(1, 2, 3); // 输出 [2, 3]
箭头函数允许多行语句或者单行表达式作为函数体。多行语句要用 {} 括起来;单行表达式不需要 {},并且会作为函数返回值:
- x = >{
- return x * x
- }; // 函数返回 x * x
- x = >x * x; // 同上一行
- x = >
- return x * x; // SyntaxError 报错,不能省略 {}
- x = >{
- x * x
- }; // 合法,没有定义返回值,返回 undefined
箭头函数也是 JS 函数的一种,所以之前的 instanceof 和 typeof 依然可用:
- var func1 = () => {};
- func1 instanceof Function; // true
- var func2 = () => {};
- typeof func2; // "function"
箭头函数内部没有 constructor 方法,也没有 prototype,所以不支持 new 操作。new (() => {}) 会触发 TypeError 报错。
- new (() = > {}) // Uncaught TypeError: () => {} is not a constructor(…)
箭头函数没有自己内部的 this 指针。在箭头函数中, this 指针是继承于其所在的作用域。(个人理解为箭头函数不具备函数作用域,相当于表达式,this 即为箭头函数被调用时外层的 this)
- var a = 1;
- var test = {
- a: 100,
- c: function() {
- console.log(this.a);
- },
- d: () = >{
- console.log(this.a)
- }
- }
- test.c(); //100
- test.d(); //1
来源: http://www.bubuko.com/infodetail-1957177.html