javascript箭头函数是什么_与普通函数有何不同【教程】

发布时间 - 2026-01-30 00:00:00    点击率:
箭头函数不是语法糖,它没有自己的this、arguments、super、new.target,不能作为构造函数,不绑定this(继承外层词法作用域),无prototype,无arguments对象,返回对象需加括号,类字段中使用会导致this脱离实例上下文。

箭头函数

不是普通函数的语法糖,它没有自己的 thisargumentssupernew.target,也不能用作构造函数——这是最根本的区别,不是“写法更短”那么简单。

箭头函数没有独立的 this 绑定

普通函数的 this 取决于调用方式(如 obj.method()this 指向 obj),而箭头函数的 this 始终继承自外层词法作用域:

  • 在对象方法中直接使用箭头函数,this 不会指向该对象,而是指向定义时的外层上下文(通常是全局或模块顶层)
  • 无法通过 .call().apply().bind() 改变箭头函数的 this
  • 事件回调里若需访问触发元素,写成 event => { ... } 是安全的;但若写成 () => { this.xxx } 且期望 this 是 DOM 元素,则一定出错

箭头函数不能用 new 调用

因为箭头函数没有 [[Construct]] 内部方法,也没有原型对象:

  • 执行 new (() => {}) 会抛出 TypeError: xxx is not a constructor
  • 没有 prototype 属性:(() => {}).prototypeundefined
  • 想封装可实例化的逻辑,必须用 function 声明或 class,不能用箭头函数替代

箭头函数没有 arguments 对象

普通函数体内可直接访问 arguments 类数组,箭头函数里访问到的是外层函数的 arguments(如果存在),否则是 ReferenceError

  • 需要类数组参数时,优先用剩余参数 (...args) => {...},它更明确、也兼容严格模式
  • 在递归场景(如简单阶乘)中误用箭头函数,会因拿不到 arguments.callee(已废弃)或无法正确引用自身而出错
  • setTimeout 等异步回调嵌套时,若依赖 arguments[0] 传参,换成箭头函数后可能意外读到上层的 arguments

返回值隐式简写有陷阱

当箭头函数体只有一条表达式且省略大括号时,会自动返回该表达式的值;但若想返回对象字面量,必须加小括号:

  • x => { foo: x } 实际返回 undefined(因为花括号被解析为代码块,不是对象)
  • 正确写法是 x => ({ foo: x }),否则对象字面量不生效
  • 返回空对象?() => ({}) —— 少了括号就变成 () => {}(空代码块,返回 undefined

真正容易被忽略的,是箭头函数在类字段中声明方法时对 this 的静默捕获:它让方法脱离实例上下文,导致绑定失效或测试难模拟。别只盯着“写起来短”,先看清楚你是否真的需要那个词法 this


# javascript  # java  # app  # 区别  # 作用域  # 封装  # 构造函数  # 递归  # 阶乘  # 继承  # class  # Event  # undefined  # function  # 对象  # 事件  # constructor  # 严格模式  # dom  # this  # 异步  # prototype  # 自己的  # 绑定  # 不能用  # 回调  # 的是  # 这是  # 则是  # 盯着  # 少了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 阿里云网站搭建费用解析:服务器价格与建站成本优化指南  jquery插件bootstrapValidator表单验证详解  Android实现代码画虚线边框背景效果  如何快速查询网址的建站时间与历史轨迹?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  JS弹性运动实现方法分析  如何在橙子建站上传落地页?操作指南详解  iOS验证手机号的正则表达式  linux top下的 minerd 木马清除方法  如何在IIS中新建站点并解决端口绑定冲突?  ,交易猫的商品怎么发布到网站上去?  如何有效防御Web建站篡改攻击?  Laravel怎么调用外部API_Laravel Http Client客户端使用  如何基于PHP生成高效IDC网络公司建站源码?  高端建站如何打造兼具美学与转化的品牌官网?  装修招标网站设计制作流程,装修招标流程?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  如何在万网ECS上快速搭建专属网站?  Laravel如何处理CORS跨域请求?(配置示例)  php json中文编码为null的解决办法  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Swift中switch语句区间和元组模式匹配  Laravel如何使用Service Container和依赖注入?(代码示例)  WEB开发之注册页面验证码倒计时代码的实现  如何在阿里云购买域名并搭建网站?  怎样使用JSON进行数据交换_它有什么限制  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  奇安信“盘古石”团队突破 iOS 26.1 提权  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  北京专业网站制作设计师招聘,北京白云观官方网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel PHP版本要求一览_Laravel各版本环境要求对照  网站制作价目表怎么做,珍爱网婚介费用多少?  zabbix利用python脚本发送报警邮件的方法  常州企业网站制作公司,全国继续教育网怎么登录?  Laravel如何使用Eloquent进行子查询  非常酷的网站设计制作软件,酷培ai教育官方网站?  如何在Windows服务器上快速搭建网站?  Linux后台任务运行方法_nohup与&使用技巧【技巧】  网站制作大概多少钱一个,做一个平台网站大概多少钱?  浅谈redis在项目中的应用  如何快速完成中国万网建站详细流程?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  Python函数文档自动校验_规范解析【教程】