javascript函数如何定义与调用_箭头函数与传统函数有哪些不同点【教程】

发布时间 - 2026-01-31 00:00:00    点击率:
函数定义分传统函数和箭头函数:传统函数可提升、有this/arguments/new.target,支持new调用;箭头函数无this绑定、无arguments和new.target,不可new,适合简单回调。

函数定义和调用的两种写法必须分清场景

JavaScript 里定义函数不是只有 function 一种方式,const fn = () => {} 这种箭头函数写法在日常开发中更常见,但不能无脑替换。关键看是否需要 thisarguments 或作为构造函数使用。

传统函数声明:function add(a, b) { return a + b; },可被提升(hoisted),能直接在定义前调用;而函数表达式(含箭头函数)不会被提升,必须先定义再调用。

  • 需要动态绑定 this(比如事件回调、对象方法)→ 用传统函数
  • 只是简单计算或作为回调传入(如 mapfilter)→ 箭头函数更简洁且避免 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,但一旦换行就

容易出错。JS 自动插入分号(ASI)会导致返回 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的作用及使用场景【说明】  潮流网站制作头像软件下载,适合母子的网名有哪些?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?