什么是箭头函数_它与普通函数有何区别

冬明同学_4169

冬明同学_4169

2026-01-15

764人浏览

原创

箭头函数是普通函数的语法糖加行为约束,无this/arguments/prototype,其this捕获定义时外层作用域值且不可变;需动态this、构造、arguments或原型操作时必须用普通函数。

什么是箭头函数_它与普通函数有何区别

箭头函数不是“另一种函数”,而是普通函数的语法糖 + 行为约束组合体——它省略了 function 关键字,但代价是放弃对 this、arguments、prototype 的控制权。

为什么调用时 this 总不对?

这是最常踩坑的地方:普通函数的 this 在运行时动态绑定(谁调用,this 就指向谁);而箭头函数根本没有自己的 this,它直接捕获定义时外层作用域的 this 值,且之后永不改变。

  • 对象方法里写箭头函数 → this 指向外层(通常是 window 或 undefined),不是对象本身
  • 事件回调中用箭头函数 → this 不是触发事件的 DOM 元素,而是定义该箭头函数时的作用域
  • 想用 call/apply/bind 强行改 this?无效 —— 箭头函数忽略所有显式绑定
const obj = {
  name: 'Alice',
  regular() { console.log(this.name); },           // ✅ 输出 'Alice'
  arrow: () => { console.log(this.name); }         // ❌ 输出 undefined(this 指向全局)
};
obj.regular(); // 'Alice'
obj.arrow();   // undefined

哪些场景必须用普通函数?

当需要以下任一能力时,不能用箭头函数:

react-modernization
react-modernization

将 React 应用升级到最新版本,从类组件迁移到 Hooks,并采用并发特性。用于现代化改造 React 代码库、迁移到 React Hooks 或升级到最新

下载
  • 作为构造函数(new MyFunc())→ 箭头函数会抛出 TypeError: MyFunc is not a constructor
  • 需要访问 arguments 对象 → 箭头函数里访问 arguments 会报 ReferenceError,得改用 rest 参数 ...args
  • 需要修改原型链(比如挂载方法到 MyFunc.prototype)→ 箭头函数没有 prototype 属性
  • 需要在类中定义实例方法且依赖 this 绑定 → 类方法应写成普通函数或使用属性初始化器 + 箭头函数(靠闭包捕获)
// ❌ 报错:箭头函数不能 new
const Person = (name) => { this.name = name };
new Person('Bob'); // TypeError

// ✅ 普通函数可正常构造
function Person(name) { this.name = name }
const p = new Person('Bob');

什么时候该优先选箭头函数?

核心原则:只用于「不需要控制 this、不需构造、不需 arguments」的轻量回调。

  • 数组方法的回调(map、filter、reduce)→ 简洁且天然避免 this 丢失
  • React 函数组件内部事件处理器(如 onClick={() => doSomething(id)})→ 避免重复绑定,也规避 this 问题
  • 封装单行计算逻辑(const isValid = (x) => x > 0 && x )→ 语法干净,意图明确
// ✅ 推荐:filter 回调简洁安全
[1, 2, 3, 4].filter(x => x % 2 === 0); // [2, 4]

// ❌ 不推荐:在需要 this 指向对象自身时硬套箭头函数
const timer = {
  delay: 1000,
  start() {
    setTimeout(() => {
      console.log(this.delay); // ✅ 正确:this 捕获自 start()
    }, this.delay);
  }
};

真正容易被忽略的点是:箭头函数的「词法 this」看似省事,实则把上下文绑定时机从「调用时」提前到了「定义时」。一旦嵌套层级变深或模块拆分后作用域变化,this 的来源就变得隐晦难查——这时候宁可多写几个 function,也别靠猜。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

react 处理器 作用域

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c语言const用法
c语言const用法

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

2023.09.20

2478

7

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

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

2025.07.29

5213

19

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

2025.09.05

750

5

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.16

343

7

golang map原理
golang map原理

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

2025.11.17

553

20

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.27

323

6

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

2023.07.31

12385

4

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

2024.08.14

5547

7

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

2025.12.25

2516

7

热门下载

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

精品课程

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

共58课时 | 12.5万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习