首页 > web前端 > js教程 > 正文

javascript函数有哪些定义方式_箭头函数和普通函数有何不同?

狼影
发布: 2025-12-20 19:47:02
原创
904人浏览过
JavaScript函数有三种定义方式:函数声明、函数表达式和箭头函数;前者具提升性且可作构造函数,后两者不可;箭头函数无this、arguments、prototype,适合回调等无需动态绑定的场景。

javascript函数有哪些定义方式_箭头函数和普通函数有何不同?

JavaScript 中函数主要有三种定义方式:函数声明、函数表达式(含匿名函数)、箭头函数。它们在语法、this 绑定、arguments 支持、new 调用能力等方面有本质区别

常见函数定义方式

函数声明:使用 function 关键字 + 函数名,会被提升(hoisted),可提前调用。

function sayHello() {
  return "Hello";
}
登录后复制

函数表达式:将函数赋值给变量,不被提升(仅变量声明提升),调用需在定义之后。

const sayHi = function() {
  return "Hi";
};
登录后复制

箭头函数:ES6 引入的简写形式,没有自己的 thisarguments,不能用作构造函数。

pollinations
pollinations

属于你的个性化媒体引擎

pollinations 247
查看详情 pollinations

立即学习Java免费学习笔记(深入)”;

const greet = () => "Hey";
登录后复制

箭头函数与普通函数的核心区别

  • this 指向不同:普通函数的 this 取决于调用方式(如 obj.method() 中 this 指向 obj);箭头函数没有自己的 this,它继承外层作用域this 值,且不可通过 call/apply/bind 修改。
  • 没有 arguments 对象:普通函数内部可访问 arguments 类数组;箭头函数中访问会报错,需用剩余参数 ...args 替代。
  • 不能作为构造函数:箭头函数没有 prototype,调用 new fn() 会抛出 TypeError;普通函数可以。
  • 没有 new.target:箭头函数中 new.target 始终为 undefined,无法判断是否被 new 调用。
  • 没有原型属性(prototype):普通函数默认有 fn.prototype,用于实现原型链继承;箭头函数没有该属性。

什么时候该用箭头函数?

适合用于:不需要独立 this、不需 arguments、不需 new 实例化 的场景,比如:

  • 回调函数(如 array.map(x => x * 2)setTimeout(() => {...}, 100)
  • 简化短小逻辑,避免手动绑定 this(如 React 事件处理器中避免 bind(this)
  • 闭包中保持外层 this 上下文(如定时器、异步操作中引用组件实例)

什么时候必须用普通函数?

需要以下任一特性时,必须使用普通函数(function 声明或表达式):

  • 方法需动态绑定 this(如对象方法、事件监听器需指向触发元素)
  • 要用 arguments 处理不定参数(尽管推荐用 ...rest
  • 要通过 new 创建实例(如自定义类、工具构造器)
  • 要利用 prototype 实现继承或共享方法
  • 需要使用 yield 写 generator 函数(箭头函数不支持)

以上就是javascript函数有哪些定义方式_箭头函数和普通函数有何不同?的详细内容,更多请关注php中文网其它相关文章!

java速学教程(入门到精通)
java速学教程(入门到精通)

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

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号