核心提示:总结加借鉴1、对 this 的关联。函数内置 this 的值,取决于箭头函数在哪儿定义,而非箭头函数执行的上下文环境。2 、new 不可用。箭头函数不能使用 new 关键字来实例化对象,不然会报错。3...
总结加借鉴
1、对 this 的关联。函数内置 this 的值,取决于箭头函数在哪儿定义,而非箭头函数执行的上下文环境。2 、new 不可用。箭头函数不能使用 new 关键字来实例化对象,不然会报错。
3、this 不可变。函数内置 this 不可变,在函数体内整个执行环境中为常量。
4、没有arguments对象。更不能通过arguments对象访问传入参数。只能使用显式命名或其他ES6新特性来完成。
鏈接:https://www.jianshu.com/p/4b101a763e85
语法:
箭头函数的语法很简单,定义自变量,然后是箭头和函数主体。
1、不引入参数:
var sum = () => 1 + 2;
// 等同于:
var sum = function() {
return 1 + 2;
};
2、引入单个参数:
var reflect = value => value;
// 等同于:
var reflect = function(value) {
return value;
};
x => x * x
//等同于:
function (x) {
return x * x;
}
传一个参数就直接写就好了,不用加小括号。
句,所以也不用加大括号。
函数构造完毕赋给reflect加以引用。
3、引入多个参数,则应加上小括号
var sum = (num1, num2) => num1 + num2;
// 等同于:
var sum = function(num1, num2) {
return num1 + num2;
};
4、若你想使用标准的函数体,或者函数体内可能有更多的语句要执行,则要用大括号将函数体括起来,并明确定义返回值。
var sum = (num1, num2) => { return num1 + num2; }
//等同于:
var sum = function(num1, num2) {
return num1 + num2;
};
大括号内的部分基本等同于传统函数
5、箭头函数若要返回自定义对象的话,就必须用小括号把该对象括起来先
var getTempItem = id = > ({
id: id,
name: "Temp"
});
// 等同于:
var getTempItem = function(id) {
return {
id: id,
name: "Temp"
};
};
用小括号包含大括号则是对象的定义,而非函数主体
基础语法
(param1, param2, …, paramN) => { statements }
(param1, param2, …, paramN) => expression
// 等价于:(param1, param2, …, paramN) => { return expression; }
/* 当删除大括号时,它将是一个隐式的返回值,这意味着我们不需要指定我们返回*/
// 如果只有一个参数,圆括号是可选的:
(singleParam) => { statements; }
singleParam => { statements; }
// 如果箭头函数 无参数 , 必须使用 ()圆括号或者 _下划线:
() => { statements; }
或
_ => { statements; }
//返回一个对象时,函数体外要加圆括号
params => ({foo: bar})
// 支持 剩余参数 Rest parameters 和默认参数 default parameters:
(param1, param2, ...rest) => { statements }
// ...rest 参数, 必须是参数列表最后一个参数
不绑定 this
在箭头函数出现之前,每个新定义的函数都有其自己的this值(例如,构造函数的 this 指向了一个新的对象;严格模式下的函数的this值为undefined;如果函数是作为对象的方法被调用的,则其 this 指向了那个调用它的对象)。在面向对象风格的编程中,这会带来很多困扰。
function Person() {
// 构造函数 Person() 定义的 `this` 就是新实例对象自己
this.age = 0;
setInterval(function growUp() {
// 在非严格模式下,growUp() 函数定义了其内部的 `this`为全局对象,
// 不同于构造函数Person()的定义的 `this`
this.age++;
}, 3000);
}
var p = new Person();
在 ECMAScript 3/5 中,这个问题通过把this的值赋给变量,然后将该变量放到闭包中来解决。
function Person() {
var self = this;
// 也有人选择使用 `that` 而非 `self`, 只要保证一致就好.
self.age = 0;
setInterval(function growUp() {
// 回调里面的 `self` 变量就指向了期望的那个对象了
self.age++;
}, 3000);
}
var p = new Person();


