超越函数界限:探索JavaScript函数的无限可能

🎬 岸边的风:个人主页

 🔥 个人专栏 :《 VUE 》 《 javaScript 》

⛺️ 生活的理想,就是为了理想的生活 !


目录

📚 前言

📘 1. 函数的基本概念

📟 1.1 函数的定义和调用

📟 1.2 参数和返回值

📟 1.3 匿名函数

📘 2. 函数的高级概念

📟 2.1 作用域

📟 2.2 闭包

📟 2.3 高阶函数

📘 3. 函数的应用场景

📟 3.1 回调函数

📟 3.2 递归

📟 3.3 函数柯里化

📚  写在最后


📚 前言

 

 

JavaScript中的函数是一种重要的编程概念,它允许我们封装可重用的代码块,并在需要时进行调用。本文将深入介绍JavaScript函数的各个方面,包括函数定义和调用、参数和返回值、作用域和闭包、高阶函数以及常见的函数应用场景。 

📘 1. 函数的基本概念

JavaScript中,函数是一段封装了可执行代码的命名代码块。它允许我们将代码组织成逻辑单元,并在需要时进行调用。函数具有以下特点:

📟 1.1 函数的定义和调用

函数的定义使用 function 关键字,后跟函数名、参数列表和函数体,如下所示:

function add(a, b) { return a + b; }

函数名称是一个标识符,用于在调用函数时引用它。调用函数时,可以通过在函数名称后加上小括号,并传递参数的方式调用函数,如下所示:

var result = add(2, 3); // 调用add函数,并将结果赋值给result变量 
console.log(result); // 输出:5

📟 1.2 参数和返回值

函数可以接受零个或多个参数,并且可以返回一个值。参数是函数定义时的占位符,用于在调用函数时传递数据。返回值是函数执行完毕后返回给调用者的结果。下面是一个带有参数和返回值的函数示例:


function multiply(a, b) { return a * b; } 
var result = multiply(2, 3); 
console.log(result); // 输出:6

📟 1.3 匿名函数

除了使用函数名定义函数外,还可以使用匿名函数(没有函数名)来创建函数。匿名函数通常作为回调函数或立即执行函数使用。以下是一个匿名函数的示例:

var greet = function(name) 
{ console.log('Hello, ' + name + '!'); }; 
greet('Alice'); // 输出:Hello, Alice!

📘 2. 函数的高级概念

除了基本概念外,JavaScript函数还具有一些高级概念,包括作用域、闭包和高阶函数

📟 2.1 作用域

作用域定义了变量可访问的范围。JavaScript中有全局作用域和函数作用域。在函数内部定义的变量只能在函数内部访问,而在函数外部定义的变量则可以在整个脚本中访问。以下是一个作用域的示例:

var globalVar = 'Global Variable'; 
function foo() 
{ var localVar = 'Local Variable'; console.log(localVar); // 输出:Local Variable console.log(globalVar); // 输出:Global Variable 
} 
foo(); 
console.log(localVar); // 抛出ReferenceError异常,因为localVar不在全局作用域中

📟 2.2 闭包

 

闭包指的是函数能够访问其定义时所在的词法作用域。它使函数可以记住并访问在其外部定义的变量。以下是一个闭包的示例: 


function outer() 
{ 
var outerVar = 'Outer Variable'; function inner() { console.log(outerVar); // 输出:Outer Variable } 
return inner; 
} 
var closure = outer(); 
closure(); // 输出:Outer Variable

📟 2.3 高阶函数

高阶函数是以函数作为参数或返回值的函数。它们允许我们编写更灵活和可复用的代码。常见的高阶函数包括 mapfilterreduce 等。以下是一个高阶函数的示例:

function multiplyBy(factor) { 
return function(number) { 
return number * factor; }; 
} 
var double = multiplyBy(2); 
var triple = multiplyBy(3); 
console.log(double(4)); // 输出:8 
console.log(triple(4)); // 输出:12

📘 3. 函数的应用场景

JavaScript函数在各种应用场景中发挥着重要作用。以下是几个常见的应用场景:

📟 3.1 回调函数

 

回调函数是作为参数传递给其他函数,并在特定事件发生时被调用的函数。它们常用于处理异步操作、事件处理和请求响应等场景。

function download(url, onSuccess, onError) { 
// 下载操作... 
if (downloadCompleted) { 
onSuccess(data); } 
else 
{ onError(error); 
} 
} 
function handleSuccess(data) { 
console.log('下载成功:' + data); 
} 
function handleError(error) { 
console.log('下载失败:' + error); 
} download('https://example.com/file', handleSuccess, handleError);

📟 3.2 递归

递归是一种函数调用自身的技术。它可以用于解决需要重复执行相似任务的问题,例如树遍历、阶乘计算和斐波那契数列等。

function factorial(n) { 
if (n === 0 || n === 1) { 
return 1; 
} else { 
return n * factorial(n - 1); 
} 
} 
console.log(factorial(5)); // 输出:120

📟 3.3 函数柯里化

函数柯里化是将一个接受多个参数的函数转换为一系列接受单个参数的函数的技术。它可以使函数更加灵活,便于部分应用和组合

function add(a, b) { 
return a + b; 
} 
function curry(fn) { 
return function(a) { 
return function(b) { 
return fn(a, b); 
}; 
}; } 
var curriedAdd = curry(add); 
var add2 = curriedAdd(2); 
console.log(add2(3)); // 输出:5

📚  写在最后

JavaScript函数是封装可重用代码块的重要工具。它们通过定义和调用来实现代码组织和复用。函数可以接受参数并返回值,提供了灵活性和通用性。作用域和闭包帮助保持代码的隔离性和安全性,允许函数访问封闭环境中的变量。高阶函数允许函数作为参数或返回值,增强了函数的组合和操作能力。在实践中,函数用于事件处理、异步编程、模块化开发等。JavaScript函数是开发高效、可维护代码的必备工具。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/98858.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程仓库上创建一个新的分支 `b` 并将远程分支 `a` 的内容克隆到 `b` 分支上

一、需求: 要在远程仓库上创建一个新的分支 b 并将远程分支 a 的内容克隆到 b 分支上,你可以按照以下步骤进行操作: 二、解决方案: 1. 首先,使用 git clone 命令克隆远程仓库到本地。例如,要克隆一个名为…

9万字企业数字化技术中台、数据中台、工业互联网建设方案WORD

导读:原文《9万字企业数字化技术中台、数据中台、工业互联网建设方案WORD》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 目录 1 概述 1.1. 数字化企…

Android Studio实现读取本地相册文件并展示

目录 原文链接效果 代码activity_main.xmlMainActivity 原文链接 效果 代码 activity_main.xml 需要有一个按钮和image来展示图片 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk…

对Lua的理解

在redis和nginx中都潜入了Lua环境用于快速上手开发。但如何理解Lua以及Lua与宿主环境的交互是需要掌握的。 首先是Lua本身&#xff0c;打开5.1的lua版本开始编译后最后生成一个lua的可执行文件&#xff0c;这其实就是一个包含了Lua虚拟机的终端.。所以其实在不管redis也好nginx…

Spring MVC 中的常见注解的用法

目录 认识 Spring MVC什么是 Spring MVCMVC 的定义 Spring MVC 注解的运用1. Spring MVC 的连接RequestMapping 注解 2. 获取参数获取单个参数获取多个参数传递对象表单传参后端参数重命名RequestBody 接收 JSON 对象PathVariable 获取 URL 中的参数上传文件 RequestPart获取 C…

救生员可以戴耳机吗,救生员佩戴蓝牙耳机会影响工作吗?

对于救生员这样一种常驻在水边的职位&#xff0c;戴耳机可以说是比较常见的&#xff0c;佩戴的最主要原因就在于方便进行沟通以及接受指令&#xff0c;以此来确保海边以及海滩等场所的安全&#xff0c;而在这种场景下&#xff0c;对于耳机的考验也是蛮大的&#xff0c;毕竟会出…

计算机视觉之三维重建(二)(摄像机标定)

标定示意图 标定目标 P ′ M P w K [ R T ] P w P^{}MP_wK[R \space T]P_w P′MPw​K[R T]Pw​ 其中 K K K为内参数&#xff0c; [ R T ] [R \space T] [R T]为外参数。该式子需要使用至少六对内外点对进行求解内外参数&#xff08;11个未知参数&#xff09;。 其中 R 3 3 …

js 的正则表达式(二)

1.正则表达式分类&#xff1a; 正则表达式分为普通字符和元字符。 普通字符&#xff1a; 仅能够描述它们本身&#xff0c;这些字符称作普通字符&#xff0c;例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。 元字符&#xff1a; 是一些具有特殊含…

NDK 的配置记录~

NDK 的配置 NDK配置 NDK设置在 AS 路径中设置在 local.properties设置在 build.gradle ndk 和 gradle 对应关系gradle的插件和版本对应关系gradle 插件和NDK对应关系 NDK NDK&#xff08;Native Development Kit&#xff09;是一组工具和库&#xff0c;用于在 Android 平台上开…

[国产MCU]-W801开发实例-GPIO输入与中断

GPIO输入与中断 文章目录 GPIO输入与中断1、硬件准备2、软件准备3、驱动实现4、驱动测试W801的GPIO支持软件配置中断,中断触发方式包含:上升沿触发、下降沿触发、高电平触发、低电平触发。本文在前面[ 国产MCU]-W801开发实例-按键与GPIO输入的基础上实现GPIO中断配置。 1、硬…

C++笔记之基类指针动态地指向某一个子类情况列举

C笔记之基类指针动态地指向某一个子类情况列举 code review! 文章目录 C笔记之基类指针动态地指向某一个子类情况列举1.基本的多态示例2.基类中的成员函数可以设置为纯虚函数3.将基本示例修改为使用智能指针并在堆上实例化子类4.父类指针指向基类后&#xff0c;可以去调用只有…

【Android Framework (十二) 】- 智能硬件设备开发

文章目录 前言智能硬件的定义与应用智能硬件产品开发流程智能硬件开发所涉及的技术体系概述关于主板选型主板CPU芯片的选择关于串口通信 总结 前言 针对我过往工作经历&#xff0c;曾在一家智能科技任职Android开发工程师&#xff0c;简单介绍下关于任职期间接触和开发过的一些…

幼儿园托幼机构管理系统 微信小程序

托幼机构管理系统微信小程序从功能、数据流程、可行性、运行环境进行需求分析。对托幼机构管理系统微信小程序的数据库、功能进行了详细设计&#xff0c;分析了主要界面设计和相关组件设计&#xff0c;托幼机构管理系统微信小程序的具体实现进行了介绍。从数据库中获取数据、向…

.netcore windows app启动webserver

创建controller: using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks;namespace MyWorker.…

Linux 进程的地址空间

一、进程 进程&#xff1a;是一个正在运行的程序 PCB : 即是进程控制块&#xff0c;是进程存在的唯一标志。用来描述进程的属性信息&#xff0c;如进程的pid。 每一个进程都是通过fork复制而来的。 在执行fork之后&#xff0c;先将PCB复制一份给子进程&#xff0c;复制之前先…

美国大模型风向速报(一)为何重视提示工程?LangChain+向量数据库+开源大模型真香...

多家&#xff0c;且独家来自美国的信源同时向“亲爱的数据”表示&#xff0c; 提示工程&#xff08;Prompt Engineering&#xff09;在美国大模型领域备受重视。 读者都要聊&#xff0c; 那就干活。 &#xff08;一&#xff09;开源真香 现阶段&#xff0c;AI开源极客大展身手&…

CloudQuery实战 | 谁说没有一款一体化数据库操作管控云平台了?

文章目录 CloudQuery询盾的地址CloudQuery主页统一入口数据库归纳SQL编辑器权限管控审计中心数据保护数据变更 CloudQuery文档中心了解CloudQuery快速入门安装步骤社区版v2.1.0操作手册1数据查询更新日志 CloudQuery社区和活动 CloudQuery线上实战线上实战主页面展示及数据操作…

java实现人物关系抽取

java实现人物关系抽取 人物关系抽取是实体关系抽取的一种情况。实际上是两个过程&#xff1a;命名实体识别和关系抽取。 Java人物关系抽取是指从文本中提取出与Java相关的人物之间的关系。这个过程可以通过自然语言处理和文本分析的方法来实现。具体的步骤包括&#xff1a; 文本…

非常详细的 Ceph 介绍、原理、架构

1. Ceph架构简介及使用场景介绍 1.1 Ceph简介 Ceph是一个统一的分布式存储系统&#xff0c;设计初衷是提供较好的性能、可靠性和可扩展性。 Ceph项目最早起源于Sage就读博士期间的工作&#xff08;最早的成果于2004年发表&#xff09;&#xff0c;并随后贡献给开源社区。在经过…

(7)(7.6) 恢复任务回放

文章目录 前言 7.6.1 配置 7.6.2 工作原理 7.6.3 局限性 前言 本页介绍了什么是"任务继续时后退"功能以及如何使用该功能。 &#xff01;Note 从 4.1 版起&#xff0c;Plane、Copter 和 Rover 均可使用此功能。 在某些应用或运行区域&#xff0c;为了消除冲突&…