JavaScript 函数完整入门指南:声明、调用、参数、返回值、作用域全解析

发布时间:2026/9/15 7:08:39

JavaScript 函数完整入门指南:声明、调用、参数、返回值、作用域全解析 前言函数是 JavaScript 的核心基石也是代码复用、逻辑封装的核心手段。很多前端初学者刚接触 JS 时分不清函数声明 / 函数表达式、形参与实参、局部 / 全局作用域写代码时经常出现变量冲突、调用报错、返回值丢失等问题。本文结合经典《JavaScript jQuery 交互式 Web 前端开发》教材案例从零拆解 JS 函数全套知识点包含可运行示例、核心概念对比、实战使用场景看完彻底吃透基础函数适配新手入门与面试复习。一、什么是函数基础示例看懂函数作用函数本质是封装一组可重复执行代码的代码块把完成特定任务的语句打包需要时直接调用避免重复抄写代码。实战完整案例页面修改 DOM 文本HTML 代码basic-function.htmlhtml预览!DOCTYPE html html head titleBasic Function/title link relstylesheet hrefcss/c03.css / /head body h1TravelWorthy/h1 div idmessageWelcome to our site!/div !-- 引入外部JS文件 -- script srcjs/basic-function.js/script /body /htmlJS 代码basic-function.jsjavascript运行// 全局消息变量 var msg Sign up to receive our newsletter for 10% off!; // 函数声明封装修改页面文本逻辑 function updateMessage() { // 获取id为message的DOM元素 var el document.getElementById(message); // 修改元素文本内容 el.textContent msg; } // 调用函数执行内部代码 updateMessage();运行结果说明页面原本显示Welcome to our site!JS 文件加载后调用updateMessage()函数自动替换 div 内文本为优惠提示文案。函数内代码只有调用时才会执行不调用则内部逻辑永远不会运行同一函数可在代码任意位置多次调用复用 DOM 修改逻辑。二、函数的两种基础操作声明函数 调用函数2.1 function 关键字声明函数命名函数语法规则function 函数名() { 代码块 }拆解语法组成functionJS 内置关键字代表声明函数函数名自定义标识符用于后续调用()括号可存放参数无参数留空{}函数体存放需要执行的所有业务代码。示例无参基础函数javascript运行// 函数声明 function sayHello() { document.write(Hello!); }2.2 调用函数执行函数内部代码声明函数后函数不会自动执行必须通过函数名()格式调用javascript运行// 调用函数执行{}内所有代码 sayHello();调用特性同一个函数可调用无数次每次调用都会重新执行内部代码JS 存在函数提升function 声明的函数可以写在调用语句之后解释器会提前扫描全局函数定义不会报错。示例调用写在函数声明前合法javascript运行sayHello(); function sayHello() { document.write(Hello!); }三、带参数的函数形参、实参完整区分很多场景下函数执行需要外部传入数据比如计算面积需要长宽此时就要用到参数分为形参和实参两个核心概念。3.1 形参函数声明时定义的占位变量写在函数括号内的变量名就是形参仅在函数内部生效行为等同于局部变量。javascript运行// width、height 是形参 function getArea(width, height) { return width * height; }3.2 实参调用函数时传入的真实数据调用函数括号内传递的真实值 / 变量叫做实参会一一对应赋值给形参。 两种传参方式直接传入字面量数值javascript运行// 3对应width5对应height3、5是实参 getArea(3, 5);传入已定义变量javascript运行var wallWidth 3; var wallHeight 5; // 变量作为实参传递 getArea(wallWidth, wallHeight);3.3 形参 VS 实参核心区别对照表表格维度形参实参出现位置函数声明function fn(形参1,形参2)函数调用fn(实参1,实参2)本质函数内部的占位变量真实的数据 / 变量作用域仅函数内部可用全局 / 当前作用域任意数据四、函数返回值return 获取函数执行结果函数执行计算、处理逻辑后经常需要把结果交给外部代码使用依靠return关键字实现返回值。4.1 返回单个数值语法return 数据;执行 return 后函数会立刻终止return 后的代码不会运行。javascript运行function calculateArea(width, height) { var area width * height; // 返回计算结果 return area; // 下面代码永远不会执行 console.log(这段代码不会运行); } // 接收函数返回值存入变量 var wallOne calculateArea(3, 5); // wallOne 15 var wallTwo calculateArea(8, 5); // wallTwo 404.2 返回多个值借助数组JS 中return只能返回一个数据如需同时返回多个结果可将数据存入数组 / 对象后统一返回javascript运行// 计算矩形面积立方体体积返回两个结果 function getSize(width, height, depth) { var area width * height; var volume width * height * depth; // 数组打包多个值返回 var sizes [area, volume]; return sizes; } // 通过数组下标分别取出返回值 var areaOne getSize(3, 2, 3)[0]; // 面积 6 var volumeOne getSize(3, 2, 3)[1]; // 体积 18五、两种函数定义方式函数声明 VS 函数表达式JS 定义函数分为两大体系function函数声明、函数表达式匿名函数二者核心区别是函数提升。5.1 函数声明前文已用javascript运行function area(width, height) { return width * height; } // 可在声明前调用存在提升 var size area(3, 4);5.2 函数表达式匿名函数将匿名函数赋值给变量变量名作为调用标识不存在提升必须先定义再调用。javascript运行// 匿名函数赋值给变量area var area function(width, height) { return width * height; }; // 必须写在表达式定义之后写前面会报错 var size area(3, 4);核心差异总结函数声明有函数名、存在提升、可先调用后定义函数表达式大多为匿名函数、无提升、必须先定义后调用适用场景封装通用逻辑用函数声明回调、事件、一次性逻辑用函数表达式。六、IIFE 立即调用函数表达式匿名函数一次性执行IIFE 全称 Immediately Invoked Function Expression读作 “iffy”是函数表达式的特殊用法定义完成立刻执行仅运行一次。标准 IIFE 写法javascript运行var area (function() { var width 3; var height 2; // 函数执行完直接返回结果存入area变量 return width * height; })(); console.log(area); // 6语法拆解(function(){})括号将匿名函数转为表达式末尾()代表立刻执行这个函数IIFE 核心使用场景仅需运行一次的初始化代码隔离变量避免全局命名冲突配合作用域事件回调、函数传参、第三方库封装jQuery 底层大量使用。七、变量作用域局部变量 全局变量避坑重点函数内部 / 外部定义的变量访问范围完全不同这个访问范围叫做作用域也是新手最容易踩坑的知识点。7.1 局部变量函数作用域在函数内部使用var声明的变量仅当前函数内部能访问函数执行完毕后变量销毁不占用长期内存。javascript运行function getArea(width, height) { // area是局部变量函数外无法访问 var area width * height; return area; } console.log(area); // 报错area未定义局部变量优势不同函数可使用同名变量不会冲突函数执行完自动销毁节省浏览器内存。7.2 全局变量函数外部、script 顶层定义的变量整个页面所有 JS 代码、所有函数都能访问生命周期和页面一致页面关闭才销毁。javascript运行// wallSize是全局变量 var wallSize 10; function getArea() { // 函数内可直接读取全局变量 console.log(wallSize); }全局变量缺点长期驻留内存页面加载全程占用资源多 JS 文件协同开发时极易出现命名冲突代码耦合度高维护困难。补充不写 var 的隐形全局变量函数内部定义变量时省略var关键字变量会自动变成全局变量属于不良编码习惯开发中禁止使用javascript运行function test() { // 无varwidth自动升级为全局变量 width 10; } test(); console.log(width); // 10外部可访问作用域内存原理全局变量页面载入时创建页面关闭才销毁长期占用内存局部变量函数调用时创建函数执行结束立刻销毁内存开销更小开发规范优先使用局部变量尽量少定义全局变量。八、完整知识点思维导图复习速记plaintextJS函数 ├─ 定义方式 │ ├─ 函数声明 function fn(){} 【有提升可先调用】 │ └─ 函数表达式 var fn function(){} 【无提升匿名】 │ └─ IIFE 立即执行函数 (function(){})() 一次性执行、隔离变量 ├─ 参数体系 │ ├─ 形参声明时括号内占位变量 │ └─ 实参调用时传入真实数据/变量 ├─ 返回值 return │ ├─ 返回单个数据 return 123; │ └─ 返回多个数据 return [a,b];数组承载 ├─ 调用规则 fn() │ └─ 不写()仅代表函数本身加()才会执行 └─ 变量作用域 ├─ 局部变量函数内var定义仅内部访问执行后销毁 └─ 全局变量顶层定义全页面访问长期占用内存九、新手高频踩坑总结函数表达式写在调用之后报is not a function错误 解决函数表达式必须先定义再调用function 声明无限制。return 后仍写代码逻辑不执行 解决return 会终止函数后续代码全部失效。函数内变量外部读取不到 解决函数内 var 变量是局部变量外部无法访问需要 return 导出。多文件变量重名值被莫名覆盖 解决减少全局变量使用 IIFE、局部变量隔离命名空间。省略 var 定义变量意外污染全局 解决所有变量声明强制添加 var/let/const。结语函数是 JS 模块化、代码复用的根基本文覆盖教材全部核心案例从基础定义到作用域、IIFE 完整覆盖。掌握本文内容后可以轻松看懂回调函数、对象方法、闭包等进阶知识点后续会持续更新 JS 函数进阶闭包、箭头函数、this 指向系列文章。
延伸阅读

更多相关文章

2026/9/11 6:36:08

反激变换器工作原理与设计实战指南

1. 反激变换器基础概念解析反激变换器(Flyback Converter)作为开关电源家族中的重要成员,在中小功率应用领域占据着不可替代的地位。我第一次接触这种拓扑是在维修一台医疗监护仪时,发现其内部电源模块采用了这种简洁而高效的设计…

2026/9/14 22:14:39

一文吃透 JavaScript 内置对象|JS 核心内置对象全解

JavaScript 分为三大组成部分:ECMAScript(核心语法)、BOM、DOM。 而内置对象是 ECMAScript 提供的原生封装好的工具对象,不需要我们手动创建类,浏览器 / JS 引擎直接提供,开箱即用,内置大量属性…

2026/9/15 7:06:38

基于51单片机的低频迷你示波器设计:采样率、ADC与PCB全解析

简介:面向51单片机学习者的迷你示波器设计资料,完整覆盖从电路原理、PCB布局到固件实现的全流程。资源包为RAR压缩格式,共31个文件、约3.88MB,内含原理图与PCB设计文件(schdoc、pcbdoc、schlib、pcblib)及预…

2026/9/15 7:06:38

数字仿真中的时间片与Delta Cycle详解

1. 理解数字仿真中的时间片与Delta Cycle在数字电路仿真领域,时间片(Time Slot)和Delta Cycle是理解仿真器内部工作机制的两个核心概念。作为一名使用Modelsim/QuestaSim多年的工程师,我发现很多初学者虽然能完成基本仿真&#xf…

2026/9/15 7:06:38

面向毕业设计的物业管理系统开发:C++与Qt+MySQL实战解析

简介:这是一个基于 C 与 Qt 框架结合 MySQL 数据库开发的物业管理系统毕业设计源码包,适合计算机相关专业学生在毕业设计、课程设计或 Qt 项目实训中参考,解决物业管理中用户登录、权限区分、房间与投诉管理等常见业务需求。项目代码均已在本…

2026/9/15 7:06:38

擦窗机器人实测:10款主流产品优缺点全解析

1. 擦窗机器人市场现状与用户痛点我花了三个月时间测试了市面上主流的10款擦窗机器人,总花费超过3万元。作为一个家住28层、每周都要请保洁擦窗的上班族,最初我对这类产品充满期待——毕竟高空擦窗不仅危险,每次200元的保洁费用长期下来也是笔…

2026/9/15 7:06:38

Python实现番茄钟:GUI开发与时间管理实践

1. 为什么选择Python实现番茄钟?番茄钟作为一种经典的时间管理工具,其核心逻辑是通过25分钟工作5分钟休息的循环来提升专注力。选择Python来实现主要基于三点考虑:首先,Python的标准库time和tkinter已经包含了我们需要的所有基础功…

2026/9/15 7:01:38

打家劫舍全解:一维动态规划从递归到滚动数组优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码