【Java 进阶篇】深入了解JavaScript中的函数

函数是JavaScript编程中的核心概念之一。它们是可重用的代码块,可以帮助您组织和管理程序,使您的代码更具可读性和可维护性。在本篇博客中,我们将深入了解JavaScript中的函数,包括函数的基本语法、参数、返回值、作用域、闭包和高阶函数等方面。如果您是JavaScript的初学者,或者希望深化对函数的理解,这篇博客将为您提供全面的指导。
什么是函数?
在编程中,函数是一个独立的代码块,它执行特定的任务或操作。您可以将一段代码包装在函数中,然后在需要的时候多次调用该函数。这有助于避免重复编写相同的代码,并提高代码的可维护性。
JavaScript中的函数使用function关键字来定义,后跟函数名、参数和函数体。以下是一个简单的JavaScript函数的示例:
function sayHello() {console.log("Hello, World!");
}
在上面的示例中,sayHello是函数名,它后面的圆括号()用于定义函数的参数(在这种情况下,没有参数),花括号{}包含了函数体,其中包含要执行的代码。
要调用函数,只需在函数名后面加上圆括号:
sayHello(); // 输出: Hello, World!
函数调用将执行函数体内的代码。
函数的参数
函数可以接受参数,这使得函数更加通用和灵活。在函数定义中,您可以指定参数的名称,然后在函数体内使用这些参数。以下是一个带有参数的函数示例:
function greet(name) {console.log("Hello, " + name + "!");
}
在上面的示例中,greet函数接受一个名为name的参数。函数体内使用了这个参数来打招呼。调用函数时,您需要提供一个参数值:
greet("Alice"); // 输出: Hello, Alice!
greet("Bob"); // 输出: Hello, Bob!
您可以定义多个参数,用逗号分隔:
function add(a, b) {return a + b;
}var result = add(5, 3);
console.log(result); // 输出: 8
函数的返回值
函数可以返回一个值,这使得函数可以生成结果并将其传递给调用者。要指定返回值,您可以使用return语句。以下是一个返回值的函数示例:
function multiply(a, b) {return a * b;
}var result = multiply(4, 7);
console.log(result); // 输出: 28
在上面的示例中,multiply函数返回a和b的乘积,这个值被存储在result变量中。
需要注意的是,函数可以有返回值,也可以没有。如果函数没有明确的return语句,它将返回undefined。
function sayHi() {console.log("Hi there!");
}var greeting = sayHi();
console.log(greeting); // 输出: undefined
在这个示例中,sayHi函数没有返回语句,因此它返回undefined。
函数表达式
除了使用function关键字定义函数外,JavaScript还支持函数表达式。函数表达式是将函数分配给变量的一种方法。这些函数可以被传递给其他函数,存储在对象中,或者以其他方式使用。以下是一个函数表达式的示例:
var saySomething = function(message) {console.log(message);
};saySomething("Hello, function expression!"); // 输出: Hello, function expression!
在上面的示例中,saySomething变量包含一个函数表达式,它接受一个参数message,并将该参数打印到控制台。您可以像使用其他函数一样调用这个函数。
函数作用域
JavaScript中的函数有自己的作用域,这意味着在函数内部定义的变量在函数外部是不可见的,这种隔离性有助于避免命名冲突和提高代码的可维护性。以下是关于函数作用域的示例:
var globalVar = "I'm global";function exampleScope() {var localVar = "I'm local";console.log(globalVar); // 输出全局变量console.log(localVar); // 输出局部变量
}exampleScope();
console.log(globalVar); // 输出全局变量
console.log(localVar); // 报错,局部变量不可见
在上面的示例中,globalVar是一个全局变量,可以在函数内外访问,而localVar是一个局部变量,只能在exampleScope函数内部访问。
闭包
闭包是JavaScript中一个强大的概念,它发生在函数嵌套函数的情况下。闭包允许内部函数访问其外部函数的变量,即使外部函数已经执行完毕。这种行为在许多编程场景中非常有用,例如封装数据和私有成员。
以下是一个闭包的示例:
function outerFunction(outerVar) {return function innerFunction(innerVar) {console.log(outerVar + innerVar);};
}var closure = outerFunction(10);
closure(5); // 输出: 15
在这个示例中,outerFunction内部的innerFunction形成了一个闭包,可以访问outerVar,即使outerFunction已经执行完毕。
高阶函数
高阶函数是可以接受一个或多个函数作为参数,并/或返回一个函数的函数。它们是函数式编程的关键部分,允许您编写更灵活的和可重用的代码。以下是一个高阶函数的示例:
function operation(x, y, func) {return func(x, y);
}function add(a, b) {return a + b;
}function subtract(a, b) {return a - b;
}var result1 = operation(5, 3, add);
var result2 = operation(5, 3, subtract);console.log(result1); // 输出: 8
console.log(result2); // 输出: 2
在这个示例中,operation是一个高阶函数,它接受两个数和一个操作函数作为参数,然后应用该函数来执行操作。
结语
JavaScript中的函数是一项强大的工具,可以帮助您构建灵活和可维护的代码。通过深入了解函数的基础知识、参数、返回值、作用域、闭包和高阶函数,您可以更好地利用JavaScript的潜力。希望这篇博客对您理解JavaScript中的函数有所帮助。
在今天的学习中,我们详细讨论了JavaScript函数的各个方面,包括函数的定义、参数、返回值、作用域、闭包和高阶函数。这些知识是JavaScript编程的基础,也是构建复杂应用程序的关键。希望这篇博客对您有所帮助,如果您有任何问题或需要进一步的解释,请随时提问。祝您编程愉快!
| 作者信息 作者 : 繁依Fanyi CSDN: https://techfanyi.blog.csdn.net 掘金:https://juejin.cn/user/4154386571867191 |
相关文章:
【Java 进阶篇】深入了解JavaScript中的函数
函数是JavaScript编程中的核心概念之一。它们是可重用的代码块,可以帮助您组织和管理程序,使您的代码更具可读性和可维护性。在本篇博客中,我们将深入了解JavaScript中的函数,包括函数的基本语法、参数、返回值、作用域、闭包和高…...
谷歌 Chrome 浏览器正推进“追踪保护”功能
导读近日消息,根据国外科技媒体 Windows Latest 报道,谷歌计划在 Chrome 浏览器中推进“追踪保护”(Tracking Protection)功能,整合浏览器现有隐私功能,保护用户被网站跟踪。 根据一项 Chromium 提案&…...
Excel 自动提取某一列不重复值
IFERROR(INDEX($A$1:$A$14,MATCH(0,COUNTIF($C$1:C1,$A$1:$A$14),0)),"")注意:C1要空置,从C2输入公式 参考: https://blog.csdn.net/STR_Liang/article/details/105182654 https://zhuanlan.zhihu.com/p/55219017?utm_id0...
【TensorFlow2 之011】TF 如何使用数据增强提高模型性能?
一、说明 亮点:在这篇文章中,我们将展示数据增强技术作为提高模型性能的一种方式的好处。当我们没有足够的数据可供使用时,这种方法将非常有益。 教程概述: 无需数据增强的训练什么是数据增强?使用数据增强进行训练可视…...
Hadoop 安装教程 (Mac m1/m2版)
安装JDK1.8 这里最好是安装1.8版本的jdk 1. 进入官网Java Downloads | Oracle Hong Kong SAR, PRC,下滑到中间区域找到JDK8 2.选择mac os,下载ARM64 DMG Installer对应版本 注:这里下载需要注册oracle账号,不过很简单,只需要提供邮箱即可&…...
Docker - 网络模式与容器网络互连
前言 简单记录一下在Docker学习过程中,关于网络模式和容器网络互连的基本概念。 一、Docker的网络模式 (1)桥接模式:Docker会为每个容器创建一个虚拟网卡,并将这些虚拟网卡连接到一个虚拟交换机上,从而实…...
【基础篇】三、Flink集群角色、系统架构以及作业提交流程
文章目录 1、集群角色2、部署模式3、Flink系统架构3.1 作业管理器(JobManager)3.2 任务管理器(TaskManager) 4、独立部署会话模式下的作业提交流程5、Yarn部署的应用模式下作业提交流程 1、集群角色 Flink提交作业和执行任务&…...
第一个2DGodot游戏-从零开始-逐步解析
视频教程地址:https://www.bilibili.com/video/BV1Hw411v78Y/ 前言 大家好,这一集我将要带领大家完成官方文档里的第一个2DGodot游戏,从零开始,逐步解析,演示游戏的制作全过程,尽量让,就算是新…...
大数据学习(7)-hive文件格式总结
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博>主哦&#x…...
GRU的 电影评论情感分析 - python 深度学习 情感分类 计算机竞赛
1 前言 🔥学长分享优质竞赛项目,今天要分享的是 🚩 GRU的 电影评论情感分析 - python 深度学习 情感分类 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 这…...
kafka简述
前言 在大数据高并发场景下,当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。一般选型是Kafka、RocketMQ,这源于这些中间件的高吞吐、可扩展以及可靠…...
《RISC-V体系结构编程与实践》的benos_payload程序——mysbi跳转到benos分析
1、benos_payload.bin结构分析 韦东山老师提供的开发文档里已经对程序的结构做了分析,这里不再赘述,下面是讨论mysbi跳转到benos的问题; 2、mysbi跳转到benos的代码 3、跳转产生的疑问 我认为mysbi.bin最后跳转到0x22000地址处执行࿰…...
ad5665r STM32 GD32 IIC驱动设计
本文涉及文档工程代码,下载地址如下 ad5665rSTM32GD32IIC驱动设计,驱动程序在AD公司提供例程上修改得到,IO模拟的方式进行IIC通信资源-CSDN文库 硬件设计 MCU采用STM32或者GD32,GD32基本上和STM32一样,针对ad566r的IIC时序操作是完全相同的. 原理图设计如下 与MC…...
TensorFlow入门(十六、识别模糊手写图片)
TensorFlow在图像识别方面,提供了多个开源的训练数据集,比如CIFAR-10数据集、FASHION MNIST数据集、MNIST数据集。 CIFAR-10数据集有10个种类,由6万个32x32像素的彩色图像组成,每个类有6千个图像。6万个图像包含5万个训练图像和1万个测试图像。 FASHION MNIST数据集由衣服、鞋子…...
CSwin Transformer 学习笔记
Cswin提出了上图中使用交叉形状局部attention,为了解决VIT模型中局部自注意力感受野进一步增长受限的问题,同时提出了局部增强位置编码模块,超越了Swin等模型,在多个任务上效果SOTA(当时的SOTA,已经被SG Fo…...
Linux上通过mysqldump命令实现自动备份
Linux上通过mysqldump命令实现自动备份 直接上代码 #!/bin/bash mysql_user"root" mysql_host"localhost" mysql_port"3306" mysql_charset"utf8mb4"backup_location/home/mysql/mysql_back/sql # 是否开始自动删除过期文件,过期时间…...
v-model与.sync的区别
我们在日常开发的过程中,v-model指令可谓是随处可见,一般来说 v-model 指令在表单及元素上创建双向数据绑定,但 v-model 本质是语法糖。但提到语法糖,这里就不得不提另一个与v-model有相似功能的双向绑定语法糖了,这就是 .sync修饰符。在这里就两者的使用进行一下比较和总结: …...
Linux---进程(1)
操作系统 传统的计算机系统资源分为硬件资源和软件资源。硬件资源包括中央处理器,存储器,输入设备,输出设备等物理设备;软件资源是以文件形式保存在存储器上的成熟和数据等信息。 操作系统就是计算机系统资源的管理者。 如果你的计…...
C# U2Net Portrait 跨界肖像画
效果 项目 下载 可执行文件exe下载 源码下载...
华为云云耀云服务器L实例评测|华为云耀云服务器L实例评测包管理工具安装软件(六)
七、华为云耀云服务器L实例评测包管理工具安装软件: 根据企业级项目架构图所示,本章主要是安装公司企业项目的基本环境LNMP,相关的包管理器Composer、Node、Npm、Yarn安装,评测一下包管理工具安装软件是否存在问题,如果…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
