es6 箭头函数的使用总结,带你深入理解js中的箭头函数
箭头函数是ES6中非常重要的性特性。它最显著的作用就是:更简短的函数,并且不绑定this,arguments等属性。它最适合用于非方法函数,并且它们不能用作构造函数。
1.箭头函数的短语法,当单条语句返回时,可省略{}和return
var f = v => v;
// 等同于
var f = function(v) {
return v;
}
var f = () => 5;
// 等同于
var f = function() {
return 5;
}
var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
return num1 + num2;
}
注意的是:上面的写法都是匿名函数来使用的,因此:箭头函数作为匿名函数,是不能作为构造函数的,不能使用new
2.不绑定this
在箭头函数出现之前,每个新定义的函数都有它自己的 this值(在构造函数的情况下是一个新对象,在严格模式的函数调用中为 undefined,如果该函数被称为“对象方法”则为基础对象等)。This被证明是令人厌烦的面向对象风格的编程。箭头函数会捕获其所在上下文的 this 值,作为自己的 this 值。例如:
function fn(){
this.num = 0;
let s=setInterval(() => {
if(this.num<10){
this.num++;
}else{
console.log(this.num);
clearInterval(s);
}
}, 1000);
}
var f=new fn();//10秒后输出10上面的例子可以看出,箭头功能不会创建自己的this;它使用封闭执行上下文的this值。setInterval的函数内的this与封闭函数中的this值相同。如果在一个对象中使用的时候,箭头函数中的this就为对象默认环境中的window对象了。例如:
var obj = {
a: 10,
b: () => {
console.log(this.a); //undefined
console.log(this); //window
},
c:function() {
console.log(this.a); //10
console.log(this); //obj{...}
}
}
obj.b();
obj.c();3.使用call()和apply()调用
由于 this 已经在词法层面完成了绑定,通过 call() 或 apply() 方法调用一个函数时,只是传入了参数而已,对 this 并没有什么影响。
var adder = {
base : 1,
add : function(a) {
var f = v => v + this.base;
return f(a);
},
addThruCall: function(a) {
var f = v => v + this.base;
var b = {
base : 2
};
return f.call(b, a);
}
};
console.log(adder.add(1)); // 输出 2
console.log(adder.addThruCall(1)); // 仍然输出 2(而不是3 )4.不绑定arguments
箭头函数不绑定arguments,取而代之用rest参数…解决,例如:
var fn = (a)=>{
console.log(arguments);
}
fn(1)
//ReferenceError: arguments is not defined我们应该用rest参数的形式
var fn = (...a)=>{ //...a即为rest参数
console.log(a);
}
fn(2)//[2]5.使用prototype属性
箭头函数没有原型属性
var fn = () => {};
console.log(fn.prototype); // undefined说明:
1.箭头函数的this永远指向其上下文的 this。
2.箭头函数不能使用new来为作为构造器。
3.箭头函数没有prototype属性。
4.箭头函数不绑定自己的this,arguments,super或 new.target。
5.箭头函数不能当做Generator(生成器)函数。
6.不能使用yield关键字(除非是嵌套在允许使用的函数内)。
7.箭头函数不能换行。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!