0

0

JavaScript中的函数如何定义_有哪些函数类型【教程】

幻影之瞳

幻影之瞳

发布时间:2026-01-31 16:28:02

|

828人浏览过

|

来源于php中文网

原创

JavaScript函数选型无唯一正确方式,关键取决于this绑定、执行时机、复用性及模块导出需求:普通函数声明可提升且this由调用决定;函数表达式与箭头函数不提升,后者无this和arguments;Generator与async函数分别返回迭代器和Promise,均不可构造实例。

javascript中的函数如何定义_有哪些函数类型【教程】

JavaScript 中定义函数没有唯一“正确”方式,关键看你要解决什么问题:需不需要绑定 this?是否立即执行?是否要被多次复用?是否在模块中导出?选错类型会导致 this 指向异常、箭头函数无法用 new、或 arguments 不可用等实际问题。

普通函数声明(function declaration)

function 关键字 + 函数名 + 括号定义,会被**提升(hoisted)**,可在声明前调用。

适用场景:需要在定义前就调用的工具函数,或作为模块主入口;不推荐在条件块内使用(行为不一致)。

  • 不能用 await 直接修饰(需包裹在 async 函数内)
  • this 由调用方式决定(如 obj.fn()thisobj
  • 有独立的 arguments 对象,可访问所有实参
function sum(a, b) {
  console.log(arguments.length); // 2
  return a + b;
}

函数表达式与箭头函数(function expression / arrow function)

函数表达式是把函数赋给变量,不会被提升;箭头函数是其语法糖,但语义完全不同——它没有自己的 thisarguments,也不能用 new 实例化。

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

动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版
动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版

动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包

下载

常见错误:在对象方法里用箭头函数导致 this 指向外层作用域,而非当前对象。

  • 箭头函数适合简短回调(如 array.map(x => x * 2))、避免手动绑定 this
  • 函数表达式适合需要命名调试、或需被 name 属性识别的场景(const fn = function namedFn() {}
  • 两者都不支持重复声明同名变量(const fn = ... 再次赋值会报错)
const multiply = function(a, b) { return a * b };
const double = (x) => x * 2;

Generator 函数和 async 函数

这两类是特殊函数,语法上加了 *async 前缀,返回值不是普通值而是迭代器或 Promise。

别误以为 async function 只是“带 await 的函数”——它强制返回 Promise,即使你 return 123,实际返回的是 Promise.resolve(123)

  • Generator 函数用 yield 暂停执行,适合实现状态机、惰性序列(如分页迭代)
  • async 函数中 await 只对 thenable 有效;await null 会立即 resolve,但 await undefined 也会(别依赖这个行为)
  • 两者都不能用作构造函数(new asyncFn()TypeError
async function fetchUser(id) {
  const res = await fetch(`/api/users/${id}`);
  return res.json();
}

function* range(start, end) { for (let i = start; i < end; i++) yield i; }

真正容易被忽略的点在于:函数类型一旦选定,就锁定了它的 this 绑定机制、实例化能力、参数处理方式。比如把一个本该是普通函数的方法写成箭头函数,后续加事件监听器时 this 就突然失效;又比如在需要 arguments.callee 的老代码里换成箭头函数,直接报错。选型不是语法习惯问题,而是运行时契约问题。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

237

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

459

2024.03.01

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

531

2023.09.20

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

61

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

42

2025.11.27

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

5398

2023.07.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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