当前位置: 首页 > news >正文

【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函数返回ab的乘积,这个值被存储在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地址处执行&#xff0…...

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安装,评测一下包管理工具安装软件是否存在问题,如果…...

在PYTHON中用zlib模块对文本进行压缩,写入图片的EXIF中,后在C#中读取EXIF并用SharpZipLib进行解压获取压缩前文本

在PYTHON中用zlib模块对文本进行压缩长度,写入图片的EXIF中,并在C#中读取EXIF后用SharpZipLib进行解压缩获取压缩前文本。 PS:当压缩后的字节数组长度为单数时,无法写入EXIF的XPComment中,需要在后面增加一个以utf-8编码的空格&a…...

centos / oracle Linux 常用运维命令讲解

目录 1.shell linux常用目录: 2.命令格式 3.man 帮助 4.提示符 5.echo输出字符串或变量值 6.date显示及设置系统的时间或日期 7.重启系统 8.关闭系统 9.登录注销 10.wget 下载文件 11.ps 查看系统的进程 12.top动态监视进程信息和系统负载等信息 13.l…...

EMNLP 2023 录用论文公布,速看NLP各领域最新SOTA方案

EMNLP 2023 近日公布了录用论文。 开始前以防有同学不了解这个会议,先简单介绍介绍:EMNLP 是NLP 四大顶会之一,ACL大家应该都很熟吧,EMNLP就是由 ACL 下属的SIGDAT小组主办的NLP领域顶级国际会议,一年举办一次。相较于…...

互联网Java工程师面试题·Java 并发编程篇·第三弹

目录 26、什么是线程组,为什么在 Java 中不推荐使用? 27、为什么使用 Executor 框架比使用应用创建和管理线程好? 27.1 为什么要使用 Executor 线程池框架 27.2 使用 Executor 线程池框架的优点 28、java 中有几种方法可以实现一个线程…...

mac jdk的环境变量路径,到底在哪里?

在mac 电脑中,直接执行 java -version 显示Jdk的版本为1.8 然后打印Java环境变量 在终端中执行 echo $JAVA_HOME 1、情况一:发现环境变量是空的 我草,没配置环境变量怎么能使用Java ,和查看jdk版本 2、情况二:环…...

PyQt5 PyQt6 Designer 的安装

pip国内的一些镜像 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban) http://pypi.douban.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.…...

数据库:Hive转Presto(四)

这次补充了好几个函数,并且新加了date_sub函数,代码写的比较随意,有的地方比较繁琐,还待改进,而且这种文本处理的东西,经常需要补充先前没考虑到的情况,要经常修改。估计下一篇就可以补充完所有…...

16基于otsuf方法的图像分割,程序已调通,可更换自己的图片进行分割,程序具有详细的代码注释,可轻松掌握。基于MATLAB平台,需要直接拍下。

基于otsuf方法的图像分割,程序已调通,可更换自己的图片进行分割,程序具有详细的代码注释,可轻松掌握。基于MATLAB平台,需要直接拍下。 16matlab图像处理图像分割 (xiaohongshu.com)...

2、使用阿里云镜像加速器提升Docker的资源下载速度

1、注册阿里云账号并登录 https://www.aliyun.com/ 2、进入个人控制台,找到“容器镜像服务” 3、在“容器镜像服务”中找到“镜像加速器” 4、在右侧列表中会显示你的加速器地址,复制地址 5、进入/etc/docker目录,编辑daemon.json&#xff0…...

贴片电容材质的区别与电容的主要作用

一、贴片电容材质NPO、COG、X7R、X5R、Y5V、Z5U区别 主要是介质材料不同,不同介质种类由于它的主要极化类型不一样,其对电场变化的响应速度和极化率也不一样。在相同的体积下的容量就不同,随之带来的电容器介质的损耗、容量的稳定性也就不同…...