简介:
箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或 new.target。这些函数表达式更适用于那些本来需要匿名函数的地方,并且它们不能用作构造函数。
JavaScript Demo: Functions =>
1 | var materials = [ |
Syntax
Basic syntax
1 | (param1, param2, …, paramN) => { statements } |
Advanced syntax
1 | // 函数体加括号,返回对象字面量表达式(?function类型对象,加括号与不加括号的区别是,): |
描述
引入箭头函数的两个原因:简短的函数写法和没有this的干扰
简短的函数写法:
1 | var elements = [ |
没有this的干扰
除了箭头函数,每个函数基于调用方式定义了自己的this值:
- 一个构造函数的this值是其生成的一个新对象
- 在严格模式下,函数调用的this值是undefined
- 如果函数作为对象的方法调用,那么this值就是这个对象
- 等等
事实证明,面向对象的编程风格并不理想。1
2
3
4
5
6
7
8
9
10
11
12function Person() {
// 构造函数 Person() 定义了自己的 this ,值为它生成的一个实例.
this.age = 0;
setInterval(function growUp() {
//在非严格模式中,growUp()函数定义的this值为全局对象(因为growUp()在全局环境中执行),
//和 Person() 构造函数所定义的this值不同。
this.age++;
}, 1000);
}
var p = new Person();
在ECMAScript 3/5中,由this引发的这种问题可以通过将this值赋给变量来解决:1
2
3
4
5
6
7
8
9function Person() {
var that = this;
that.age = 0;
setInterval(function growUp() {
// 回调中所使用的that变量指向的正是我们期望的对象
that.age++;
}, 1000);
}
参考自:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions