当前位置:网站首页>es6箭头函数讲解
es6箭头函数讲解
2022-07-29 12:03:00 【coldriversnow】
s6箭头函数的用法
箭头函数是es6的一种函数的简写方法。
如下:
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函数。
边栏推荐
- 365 days challenge LeetCode1000 topic - Day 043 square mathematics effectively
- 2.2 Selection sort
- 金仓数据库KingbaseES安全指南--6.7. GSSAPI身份验证
- Basic knowledge of redis database learning - basic, commonly used
- 【Unity3D】场景切换、退出全屏、退出游戏
- Pangolin库链接库问题
- 【每日SQL打卡】DAY 21丨报告系统状态的连续日期【难度困难】
- 黑马四小时入门学习记录-2|本地应用
- Learning with Recoverable Forgetting readings
- 关于栈迁移的那些事儿
猜你喜欢
随机推荐
【实用工具】Image Assistant下载指定页面的所有图片
WordPress 重置密码
QCon大会广州站它来了!独家定制双肩背包等你领取!
谷歌“消灭” Cookie 计划延至 2024 年
DAY 22 丨 daily SQL clock 】 【 the average selling price of the difficulty of medium 】
The interviewer training courseware (very practical in-house training courseware)
【每日SQL打卡】DAY 23丨学生们参加各科测试的次数【难度简单】
MyCat中间件高可用、读写分离、分片、主从切换、ER分片
【Unity3D】场景切换、退出全屏、退出游戏
通过递归的方式实现树形结构
一文带你搞懂JSON和TCP/IP
Distributed Configuration Center of Infrastructure
【每日SQL打卡】DAY 21丨每个帖子的评论数【难度中等】
游戏合作伙伴专题:BreederDAO 与《王国联盟》结成联盟
DAY 20 daily SQL clock 】 【 丨 query difficulty moderate 】 【 team integral
测试环境要多少,从现实需求说起
three.js 报错信息 RGBELoader.js:46 RGBELoader Bad File Format: bad initial token
RediSearch 发布 v2.4.10 & v2.4.11 版本
【day04】IDEA、方法
递归-八皇后问题







