javascript箭头函数是什么_它和普通函数有哪些区别?
发布时间 - 2026-01-04 00:00:00 点击率:次箭头函数没有自己的this,继承外层词法作用域的this;不能用作构造函数,无prototype、arguments、caller、callee、yield,也不支持new调用,适用于无需独立this和构造能力的场景。
箭头函数没有自己的 this,它继承外层作用域的 this
这是最常踩坑的一点。普通函数的 this 在调用时动态绑定(取决于怎么调用),而箭头函数压根不绑定 this,它直接从定义时的词法作用域向上查找 this 值。
典型问题场景:给 DOM 元素绑定事件、在对象方法中使用定时器、Vue/React 组件里写回调。
- 普通函数:
const obj = { name: 'Alice', say: function() { console.log(this.name) } } obj.say() // 'Alice';但 setTimeout(obj.say, 100) 会输出undefined(因为this指向全局) - 箭头函数:
const obj = { name: 'Alice', say: () => { console.log(this.name) } // 这里的this是定义时外层的this,不是obj} // 即使调用 obj.say(),也几乎肯定不是你想要的结果
箭头函数不能用作构造函数,也没有 prototype 和 arguments
它没有 [[Construct]] 内部方法,所以不能用 new 调用;同时没有 prototype 属性,也不能被原型链继承;也没有独立的 arguments 对象(得靠 rest 参数 ...args 替代)。
- 报错示例:
const Arrow = () => {} new Arrow() // TypeError: Arrow is not a constructor - 替代
arguments:function old(a, b) { console.log(arguments[0]) } const arrow = (...args) => { console.log(args[0]) }
箭头函数没有 arguments、caller、callee,也不支持 yield
这些是普通函数的特有属性或能力。箭头函数设计初衷就是“轻量级函数表达式”,不承担构造、动态参数捕获或协程职责。
-
arguments不可用 → 必须用 rest 参数; -
caller/callee在严格模式下本就禁用,但箭头函数彻底没这俩属性; -
yield不能用 → 要写生成器必须用function*,不能写() => yield; - 没有
name属性(或为""),调试时堆栈里显示为anonymous。
什么时候该用箭头函数?记住两个关键信号
一是「不需要自己的 this」,二是「不需要被 new 调用」。常见于:数组方法回调(map/filter/reduce)、事件监听器(当需要闭包访问外层变量时)、Promise 链中的 then 回调。
- 推荐用法:
[1, 2, 3].map(x => x * 2) button.addEventListener('click', () => this.handleClick()) // this 指向组件实例 - 不该用的场景:
const utils = { now() { return Date.now() }, delay: () => setTimeout(this.now, 100) // ❌ this.now 是 undefined,因为箭头函数的 this 不是 utils

真正容易被忽略的是:箭头函数的简洁性会掩盖它对执行上下文的“无感”——它不关心你怎么调用它,只认自己出生的地方。写之前先问一句:这里需要自己的 this 吗?需要被 new 吗?需要动态参数吗?答案只要有一个“是”,就别用箭头函数。
# vue
# react
# javascript
# java
# 栈
# 区别
# 作用域
# red
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
php打包exe后无法访问网络共享_共享权限设置方法【教程】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何用花生壳三步快速搭建专属网站?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
javascript中的try catch异常捕获机制用法分析
JS中对数组元素进行增删改移的方法总结
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
如何解决hover在ie6中的兼容性问题
如何在服务器上配置二级域名建站?
Bootstrap整体框架之JavaScript插件架构
html5的keygen标签为什么废弃_替代方案说明【解答】
如何在阿里云ECS服务器部署织梦CMS网站?
如何在建站主机中优化服务器配置?
如何续费美橙建站之星域名及服务?
香港服务器租用费用高吗?如何避免常见误区?
如何在景安服务器上快速搭建个人网站?
香港服务器部署网站为何提示未备案?
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
Mybatis 中的insertOrUpdate操作
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
如何做网站制作流程,*游戏网站怎么搭建?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
如何确认建站备案号应放置的具体位置?
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
jquery插件bootstrapValidator表单验证详解
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Python高阶函数应用_函数作为参数说明【指导】
如何彻底卸载建站之星软件?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel如何优化应用性能?(缓存和优化命令)
Laravel如何实现API版本控制_Laravel版本化API设计方案
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
简单实现Android文件上传
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何将凡科建站内容保存为本地文件?
敲碗10年!Mac系列传将迎来「触控与联网」双革新
详解jQuery停止动画——stop()方法的使用
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
Bootstrap CSS布局之列表
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Android GridView 滑动条设置一直显示状态(推荐)
Laravel如何使用Eloquent进行子查询
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
海南网站制作公司有哪些,海口网是哪家的?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何实现javascript表单验证_正则表达式有哪些实用技巧

