javascript函数如何定义与调用_箭头函数与传统函数有哪些不同点【教程】
发布时间 - 2026-01-31 00:00:00 点击率:次函数定义分传统函数和箭头函数:传统函数可提升、有this/arguments/new.target,支持new调用;箭头函数无this绑定、无arguments和new.target,不可new,适合简单回调。
函数定义和调用的两种写法必须分清场景
JavaScript 里定义函数不是只有 function 一种方式,const fn = () => {} 这种箭头函数写法在日常开发中更常见,但不能无脑替换。关键看是否需要 this、arguments 或作为构造函数使用。
传统函数声明:function add(a, b) { return a + b; },可被提升(hoisted),能直接在定义前调用;而函数表达式(含箭头函数)不会被提升,必须先定义再调用。
- 需要动态绑定
this(比如事件回调、对象方法)→ 用传统函数 - 只是简单计算或作为回调传入(如
map、filter)→ 箭头函数更简洁且避免this失效 - 要通过
new实例化 → 只能用传统函数,箭头函数会报TypeError: xxx is not a constructor
箭头函数没有自己的 this,这点必须手动验证
箭头函数不绑定 this,它沿作用域链向上找外层函数的 this 值。这个特性在对象方法或事件监听器中极易出错。
比如:
const obj = {
name: 'test',
regular() { console.log(this.name); }, // 输出 'test'
arrow: () => { console.log(this.name); } // 输出 undefined(this 指向全局或 module.exports)
};
- 在类的实例方法中误用箭头函数 →
this指向错误,无法访问实例属性 - 给 DOM 元素绑定事件时,若用箭头函数,
this不再是触发元素,而是定义时的作用域 - 调试时可在函数内加
console.log(this)快速确认绑定结果
arguments 和 new.target 在箭头函数里根本不存在
传统函数内部可用 arguments 获取所有实参,箭头函数里访问 arguments 会报 ReferenceError。同理,new.target 在箭头函数中也无效。
替代方案很明确:
- 用剩余参数
...args替代arguments(兼容性更好,语义更清晰) - 需要判断是否被
new调用 → 必须用传统函数,箭头函数天生不支持 - 想在高阶函数里透传参数?别用
arguments,改用...args解构再展开
return 隐式与换行陷阱得靠格式和括号兜底
箭头函数单表达式可省略 {} 和 return,但一旦换行就

undefined。
比如:
const getObj = () =>
{ a: 1 }; // 实际返回 undefined!因为换行后自动插入分号,{a: 1} 被当成代码块而非对象字面量
- 想返回对象字面量 → 必须用小括号包裹:
() => ({ a: 1 }) - 多行逻辑必须显式写
{}和return,别依赖隐式返回 - 团队代码规范建议:所有箭头函数统一用
{}+return,避免歧义和协作风险
最常被忽略的是嵌套箭头函数里的 this 链式捕获,以及对象方法中混用两种函数导致的上下文断裂——这些不会报错,但运行时行为和预期差很远。
# javascript
# java
# js
# 代码规范
# 作用域
# 构造函数
# Filter
# const
# 实参
# map
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何用狗爹虚拟主机快速搭建网站?
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何为不同团队 ID 动态生成多个独立按钮
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
实例解析Array和String方法
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何在阿里云部署织梦网站?
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
高端企业智能建站程序:SEO优化与响应式模板定制开发
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
香港服务器建站指南:免备案优势与SEO优化技巧全解析
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
Linux后台任务运行方法_nohup与&使用技巧【技巧】
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
Laravel模型事件有哪些_Laravel Model Event生命周期详解
js实现获取鼠标当前的位置
JavaScript如何实现继承_有哪些常用方法
SQL查询语句优化的实用方法总结
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
香港服务器租用费用高吗?如何避免常见误区?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
北京网站制作公司哪家好一点,北京租房网站有哪些?
中山网站推广排名,中山信息港登录入口?
如何用免费手机建站系统零基础打造专业网站?
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
如何在万网自助建站平台快速创建网站?
如何在IIS中新建站点并解决端口绑定冲突?
Java垃圾回收器的方法和原理总结
敲碗10年!Mac系列传将迎来「触控与联网」双革新
jQuery中的100个技巧汇总
iOS正则表达式验证手机号、邮箱、身份证号等
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
Android GridView 滑动条设置一直显示状态(推荐)
JavaScript模板引擎Template.js使用详解
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
如何快速生成高效建站系统源代码?
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
潮流网站制作头像软件下载,适合母子的网名有哪些?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?

