javascript ES6中箭头函数注意细节小结
发布时间 - 2026-01-10 23:06:31 点击率:次前言

ES6标准新增了一种新的函数:Arrow Function(箭头函数)。
为什么叫Arrow Function?因为它的定义用的就是一个箭头:
x => x * x
上面的箭头函数相当于:
function (x) {
return x * x;
}
但箭头函数带来了些许问题,下面来一起看看吧。
关于{}
第一个问题是关于箭头函数与{}。
箭头函数,乍一看,用法似乎很简单,比如像下面这样用来给数组每一项乘以2:
const numbers = [1, 2, 3]; const result = numbers.map(n => n * 2); // produces [2,4,6]
但是,如果使用不当,可能会引发意想不到的问题。比如下面,尝试为数组中每一项去产生对象字面量,看上去挺简单的map操作,还是引发了意外。
const numbers = [1, 2, 3];
const result = numbers.map(n => { value: n });
// produces [undefined], [undefined], [undefined]
什么原因造成的呢?
稍微分析可知,引起上面问题在于,箭头函数内部包裹在花括号之间的代码,被认为是一段独立的代码块而不是对象字面量,因此其单独执行,显然得到的结果就是一个全为undefined的数组。
于是,在这种情况下,其中的代码就必须有明确的返回语句或者用圆括号()包括对象字面量。
const result = numbers.map(n => ({ value: n }));
// [{value: 1}, {value:2}, {value:3}]
关于this
第二个问题是关于箭头函数与this。
使用箭头函数,你可以像下面这样写代码而不用额外在局部作用域中去暂存this:
const adder = {
sum: 0,
add(numbers) {
numbers.forEach(n => {
this.sum += n;
});
}
};
adder.add([1, 2, 3]);
// adder.sum === 6
然而,很多时候你可能会自以为是的在不经意间写错。正如下面的代码所示,this并不指向”adder”对象,而指向”adder”对象所在的作用域:
const adder = {
sum: 0,
add: (numbers) => { // scope here is important
numbers.forEach(n => {
this.sum += n;
});
}
};
adder.add([1, 2, 3]);
// adder.sum === 0
最后请记住一点:箭头函数中的this继承自外围作用域的值,因此我们不能改变其指向。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# javascript
# 箭头函数
# 箭头
# js
# es6
# 深入理解JavaScript中的箭头函数
# JS 箭头函数的this指向详解
# 深入理解Javascript箭头函数中的this
# JavaScript箭头函数中的this详解
# JS中箭头函数与this的写法和理解
# 深入理解JavaScript 箭头函数
# JavaScript ES6箭头函数使用指南
# JavaScript中箭头函数与普通函数的区别详解
# JavaScript高级教程之如何玩转箭头函数
# 问题是
# 每一项
# 你可以
# 第一个
# 带来了
# 第二个
# 很简单
# 什么叫
# 所示
# 这篇文章
# 中去
# 请记住
# 看看吧
# 在这种情况下
# 自以为
# 引发了
# 意想不到
# 组中
# 而不是
# 就必须
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
HTML 中动态设置元素 name 属性的正确语法详解
免费视频制作网站,更新又快又好的免费电影网站?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
Laravel如何使用Sanctum进行API认证?(SPA实战)
深圳网站制作培训,深圳哪些招聘网站比较好?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
5种Android数据存储方式汇总
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
WEB开发之注册页面验证码倒计时代码的实现
Laravel安装步骤详细教程_Laravel环境搭建指南
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
Mybatis 中的insertOrUpdate操作
jQuery validate插件功能与用法详解
如何在IIS中新建站点并配置端口与物理路径?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
网站制作免费,什么网站能看正片电影?
如何快速搭建高效可靠的建站解决方案?
Laravel如何使用Service Container和依赖注入?(代码示例)
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
EditPlus中的正则表达式 实战(1)
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
音响网站制作视频教程,隆霸音响官方网站?
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
Laravel怎么判断请求类型_Laravel Request isMethod用法
JavaScript如何实现音频处理_Web Audio API如何工作?
如何在云指建站中生成FTP站点?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
Thinkphp 中 distinct 的用法解析
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
如何用虚拟主机快速搭建网站?详细步骤解析
简历在线制作网站免费版,如何创建个人简历?
Laravel如何使用Telescope进行调试?(安装和使用教程)
Laravel API资源类怎么用_Laravel API Resource数据转换
网站优化排名时,需要考虑哪些问题呢?
JavaScript如何实现错误处理_try...catch如何捕获异常?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
JS弹性运动实现方法分析
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框

