0

0

javascript的箭头函数有何不同_何时应该避免使用

紅蓮之龍

紅蓮之龍

发布时间:2026-01-15 18:17:02

|

664人浏览过

|

来源于php中文网

原创

箭头函数没有自己的this绑定,不绑定arguments、prototype和yield,不能用作构造函数或generator函数,仅适用于无需动态this和参数对象的简洁回调场景。

javascript的箭头函数有何不同_何时应该避免使用

箭头函数没有自己的 this 绑定

这是最常被踩坑的一点。箭头函数不会创建自己的 this,而是沿作用域链向上捕获外层函数的 this 值。这意味着它无法被正确用作对象方法、事件处理器或需要动态绑定 this 的场景。

常见错误现象:

const obj = {
  name: 'Alice',
  regularFunc() {
    console.log(this.name); // 'Alice'
  },
  arrowFunc: () => {
    console.log(this.name); // undefined(在模块顶层,this 指向 global / undefined)
  }
};
obj.regularFunc(); // ✅
obj.arrowFunc();   // ❌

  • 当需要方法内访问调用者实例(如 obj.method())时,必须用普通函数
  • Vue/React 类组件中生命周期方法、事件回调若依赖 this,不能写成箭头函数
  • addEventListener 回调若需访问触发元素(this 指向 event.currentTarget),也不能用箭头函数

箭头函数不能用作构造函数

箭头函数没有 prototype 属性,也不支持 new 调用,否则会直接抛出 TypeError: xxx is not a constructor

使用场景:任何需要实例化对象的地方都必须避开箭头函数,比如工具类、封装可 new 的配置器等。

  • 定义类工具函数(如 new Timer())必须用 functionclass
  • 即使只是模拟构造行为(如返回带私有状态的对象),也别用箭头函数包装 return { ... } 来“假装”构造 —— 这会让调用者误判语义

箭头函数没有 arguments 对象

箭头函数内部访问 arguments 会报 ReferenceError,因为它不绑定该伪数组。ES6 后推荐用剩余参数 ...args 替代,但如果你在维护旧代码或需要兼容 arguments.callee 等黑科技,就不能用箭头函数。

纳米漫剧流水线
纳米漫剧流水线

360推出的国内首个工业级AI漫剧生产平台

下载

立即学习Java免费学习笔记(深入)”;

典型问题:

function outer() {
  const bad = () => console.log(arguments[0]); // ReferenceError
  const good = (...args) => console.log(args[0]);
}

  • 需要访问动态参数列表且未使用 ... 语法时,避免箭头函数
  • 递归匿名函数(如立即执行函数中调用自身)依赖 arguments.callee,箭头函数完全不支持
  • 某些调试场景依赖 arguments 检查入参,箭头函数会丢失这个能力

箭头函数没有 yield,不能用作 Generator

想写一个可暂停、可恢复的函数?function* 是唯一选择。箭头函数语法上就不允许出现 yield 关键字,解析阶段就会报错。

性能影响:这不是性能问题,而是语言层面的禁止 —— 试图在箭头函数里写 yield 会导致 SyntaxError: Unexpected reserved word

  • 实现异步流程控制(如手动迭代、状态机)必须用 function*
  • async 函数可以是箭头形式(const fn = async () => {}),但那是另一套机制,和 yield 无关
箭头函数简洁、适合闭包和短回调,但它不是万能替代品。真正容易被忽略的是:**它的语义缺失(无 this、无 arguments、无 prototype、无 yield)不是 bug,而是设计使然;用错地方时,错误往往延迟暴露(比如只在特定调用方式下才出问题),排查成本远高于写的时候多敲几个字母。**

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

106

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

231

2025.12.24

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

562

2023.09.20

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

870

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

30

2025.12.06

go语言闭包相关教程大全
go语言闭包相关教程大全

本专题整合了go语言闭包相关数据,阅读专题下面的文章了解更多相关内容。

151

2025.07.29

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

499

2023.08.04

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 9.4万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 1.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号