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)中防止键盘遮挡底部输入框