es6箭头函数讲解
es6箭头函数的用法
箭头函数是es6的一种函数的简写方法。
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | var f = v = > v; //等同于 var f = function (v){ return v; } var sum = (num1,num2) => num1+num2 ; //等同于 var sum = function (num1,num2){ return num1+num2 } [1,2,3].map( function (x) { return x * x; }); // 箭头函数写法 [1,2,3].map(x => x * x); //简洁了许多 |
从例子我们可以看出,省略了function,花括号‘{}’用‘=>’代替了。这种写法更简洁了。
除了简洁之外,箭头函数还有另外一个优点,就是函数体内的this的指向始终是指向定义它所在的对象,而不会指向调用它的对象,我们知道es5中的函数是谁执行它,它就指向谁。
es5 eg:
var countdown ={
'count':10,
'str':'hello!!!',
showstr(){
var _this = this;
var dom = document.getElementById('dom');
dom.innerHTML= _this.todouble(this.count);
setInterval(function(){
var dom=document.getElementById('dom');
dom.innerHTML=_this.todouble(_this.count);
_this.count --;
if(_this.count <0){
dom.innerHTML=_this.str;
}
},1000)
},
todouble(t){
var t = parseInt(t);
if(t<10){
return '0'+t;
}else{
return t;
}
}
}
countdown.showstr();
如上是一个倒计时完之后显示一个hello文本的效果,在setInterval里面,如果我们直接写this的话,这个this是指向window的。因此我们需要在setInterval函数之前先保存_this = this;
当我们使用es6的箭头函数的时候,就可以直接使用this了
es6 eg:
//es6的写法。
var countdown ={
'count':10,
'str':'hello!!!',
showstr(){
var dom = document.getElementById('dom');
dom.innerHTML= this.todouble(this.count);
setInterval(() => {
dom.innerHTML= this.todouble(this.count);;
this.count --;
if(this.count <0){
dom.innerHTML=this.str;
return false;
}
},1000)
},
todouble(t){
var t = parseInt(t);
if(t<10){
return '0'+t;
}else{
return t;
}
}
}
countdown.showstr();
上面同样的代码改成箭头函数之后我们在setInterval里面就可以直接使用this了。
箭头函数里面的this装换成es5后的代码如下:
// ES6
function fn() {
setTimeout(() => {
console.log('id:', this.id);
}, 100);
}
// ES5
function fn() {
var _this = this;
setTimeout(function () {
console.log('id:', _this.id);
}, 100);
}
上面代码中,转换后的ES5版本说明了,箭头函数里面根本没有自己的this
,而是引用外层的this,
由于箭头函数没有自己的this
,所以也就不能用call()
、apply()
、bind()
这些方法去改变this
的指向。
箭头函数使用的注意的地方:
(1)函数体内的this
对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new
命令,否则会抛出一个错误。因为箭头函数的this是由定义它的对象决定的,对象的构造函数是顶层的,它的外层,没有this可以传进去给箭头函数使用。
(3)不可以使用arguments
对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。
(4)不可以使用yield
命令,因此箭头函数不能用作Generator函数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构