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

发布时间:2026/11/5 18:04:13

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/11/5 13:12:16

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

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

2026/11/5 10:58:00

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

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

2026/11/5 16:51:33

EasyU优启通PE维护盘实战指南:制作、启动与核心操作全解析

1. 为什么一个PE维护盘值得单独拿出来聊装系统、修引导、救数据、清病毒,这些活儿但凡干过几次的人都知道,真正决定效率的往往不是你手速多快,而是手边那套PE环境靠不靠谱。EasyU(圈内习惯叫优启通)就是在这个场景下被…

2026/11/5 16:26:13

Rust原来很简单二:所有权系统

Part 2 核心篇 —— 所有权系统 本篇覆盖 第 6 ~ 10 章:所有权、借用与引用、生命周期、字符串与切片、内存模型。 ⚠️ 这是全书最重要的一篇。 把它吃透,Rust 从此“很简单”;跳过它,你会处处碰壁。请慢下来,动手敲每一段代码。 第 6 章 所有权:Rust 的第一性原理 6…

2026/11/5 15:00:49

基于Hadoop+Spark的民宿智能推荐系统设计与实现

1. 项目概述:大数据时代的民宿智能推荐这个毕业设计项目融合了当前大数据领域最主流的技术栈,构建了一个完整的民宿推荐系统解决方案。作为一名长期从事大数据系统开发的工程师,我认为这个选题非常贴合实际应用场景——随着旅游业的复苏和共享…

2026/11/5 14:10:30

ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计

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

2026/11/5 14:10:30

UART接口24位ADC搭配RS485,解决远距离温度监控难题

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

2026/11/5 14:10:30

UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践

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

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

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

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

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