1.初识
//原始
function add(a,b){
return (a+b)
}
//箭头
var add=(a,b)=>{a+b};
//调用
add(1,2)
2.讲解
1.箭头函数总是函数表达式( var fn=(){ } );并不存在箭头函数声明( function fn(){} )。
2.作为回调函数,箭头函数的公用还是很大的,如:
var a = [1,2,3,4,5];
//a = a.map( function(v){ retrun v*2 } );
a = a.map( v => v * 2 );
console.log( a ); //[2,4,6,8,10]
3.箭头函数的设计目的之一:改变this的指向问题,看下边的例子:
/* 实例1 */
var obj={
fn:function(){
var self=this; //this指向的是obj这个对象
btn.addEventListner(\"click\",function(){
self.fn(); //这里的this指向的是触发的DOM元素
})
}
}
//箭头函数
var obj={
fn:function(){
btn.addEventListner(\"click\",function(){
this.fn(); //这里的this指向的是语法环境中调用的obj
})
}
}
/* 实例2:this指向混乱的可能 */
var obj={
fn:()=>{this.fn2()},
fn2:()=>{ ... }
}
obj.fn(); //此时调用的时候,是在全局进行的,所以语法环境中this就是全局:window
4.切记一点,箭头函数的this是语法环境中传递的,不是动态环境中时刻变换的;
3.区别
1.箭头函数式匿名函数,不可以作为构造函数(不能new出来);
2.箭头函数不绑定arguments参数伪数组,可以使用扩展运算符(...)替代;
3.箭头函数不绑定this,而其内部的this是上下文中调用起始对象;
4.箭头函数无法使用apply,call改变this的指向;
5.箭头函数没有原型属性;
4.使用规则
1.简洁的语句:其中唯一的语句是 return 某个计算出的值,且没有 this 引用,且没有自身引用(递归、事件绑定 / 解绑定),且不会要求函数执行这些,那么可以安全地把它重构为 => 箭头函数。
2.如果你有一个内层函数表达式,依赖于在包含它的函数中调用 var self = this hack 或 者 .bind(this) 来确保适当的 this 绑定,那么这个内层函数表达式应该可以安全地转 换为 => 箭头函数。
3.如果你的内层函数表达式依赖于封装函数中某种像 var args = Array.prototype.slice. call(arguments) 来保证 arguments 的词法复制,那么这个内层函数应该可以安全地转 换为 => 箭头函数。
4.所有的其他情况——函数声明、较长的多语句函数表达式、需要词法名称标识符(递归 等)的函数,以及任何不符合以上几点特征的函数——一般都应该避免 => 函数语法。
底线:=> 是关于 this、arguments 和 super 的词法绑定。这个 ES6 的特性设计用来修正一 些常见的问题,而不是 bug、巧合或者错误。
继续阅读与本文标签相同的文章
一个好的详情样式
-
花旗投资现金流量预测公司Cashforce,拟新添增值服务
2026-05-18栏目: 教程
-
开发者必读 · 周报 | 003期
2026-05-18栏目: 教程
-
科技巨头正在合作解决自动驾驶标准!
2026-05-18栏目: 教程
-
人工智能帮助设计自行车并打破竞速纪录
2026-05-18栏目: 教程
-
分层存储超详细解读,为什么大数据时代它已不可或缺
2026-05-18栏目: 教程
