箭头函数:
1 2 3
| let fun = () => { console.log("lalalala"); };
|
普通函数:
1 2 3
| function fun() { console.log("lalla"); }
|
箭头函数相当于匿名函数,并且简化了函数定义。
箭头函数有两种格式:一种只包含一个表达式,连{ … }和 return 都省略掉了。还有一种可以包含多条语句,这时候就不能省略{ … }和 return。
箭头函数是匿名函数,不能作为构造函数,不能使用 new
1 2 3 4 5
| let FunConstructor = () => { console.log("lll"); };
let fc = new FunConstructor();
|
箭头函数不绑定 arguments,取而代之用 rest 参数…解决
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function A(a) { console.log(arguments); } A(1, 2, 3, 4, 5, 8);
let B = b => { console.log(arguments); }; B(2, 92, 32, 32);
let C = (...c) => { console.log(c); }; C(3, 82, 32, 11323);
|
箭头函数不绑定 this,会捕获其所在的上下文的 this 值,作为自己的 this 值
1 2 3 4 5 6 7 8 9 10 11 12 13
| var obj = { a: 10, b: () => { console.log(this.a); console.log(this); }, c: function () { console.log(this.a); console.log(this); } }; obj.b(); obj.c();
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| var obj = { a: 10, b: function () { console.log(this.a); }, c: function () { return () => { console.log(this.a); }; } }; obj.b(); obj.c()();
|
箭头函数通过 call() 或 apply() 方法调用一个函数时,只传入了一个参数,对 this 并没有影响。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| let obj2 = { a: 10, b: function (n) { let f = n => n + this.a; return f(n); }, c: function (n) { let f = n => n + this.a; let m = { a: 20 }; return f.call(m, n); } }; console.log(obj2.b(1)); console.log(obj2.c(1));
|
箭头函数没有原型属性
1 2 3 4 5 6 7 8 9 10
| var a = () => { return 1; };
function b() { return 2; }
console.log(a.prototype); console.log(b.prototype);
|
箭头函数不能当做 Generator 函数,不能使用 yield 关键字