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

超越函数界限:探索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函数是开发高效、可维护代码的必备工具。

 

 

相关文章:

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

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📚 前言 📘 1. 函数的基本概念 📟 1.1 函数的定义和调用 📟 1.2 …...

PHP实现轻量级WEB服务器接收HTTP提交的RFID刷卡信息并回应驱动读卡器显示播报语音

本示例使用的读卡器&#xff1a;RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) <?php mb_http_output(utf-8); $port88; $socket socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $bool socket_bind($socket, "0.0.0.0",…...

Neo4j之with基础

WITH 语句在 Cypher 查询中用于将之前的查询结果传递给后续的查询操作。它可以用来控制查询的流程&#xff0c;并且常常与其他语句如 MATCH、RETURN、CREATE、DELETE 等一起使用。以下是一些常用的示例和解释&#xff1a; 基本用法&#xff1a; MATCH (p:Person) WITH p RETU…...

60页数字政府智慧政务大数据资源平台项目可研方案PPT

导读&#xff1a;原文《60页数字政府智慧政务大数据资源平台项目可研方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 项目需求分析 项目建设原则和基本策略…...

循环神经网络RNN完全解析:从基础理论到PyTorch实战

目录 一、循环神经网络全解1.1 什么是循环神经网络网络结构工作原理数学模型RNN的优缺点总结 1.2 循环神经网络的工作原理RNN的时间展开数学表述信息流动实现示例梯度问题&#xff1a;梯度消失和爆炸总结 1.3 循环神经网络的应用场景文本分析与生成1.3.1 自然语言处理1.3.2 机器…...

【SA8295P 源码分析】52 - 答疑之 QNX 创建镜像、Android修改CMDLINE

【SA8295P 源码分析】52 - 答疑之 QNX 创建镜像、Android修改CMDLINE 一、QNX 侧创建 img 镜像二、QNX 侧指定只编译某一个版本三、Android定制修改selinux权限,user版本采用enforcing,userdebug版本permissive系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总》…...

网络安全法律

立法的必要性&#xff1a;网络渗透&#xff0c;网络入侵&#xff0c;网络诈骗&#xff0c;网上钓鱼侵犯知识产权&#xff0c;宣传恐怖主义&#xff0c;极端主义等伤害共鸣利益的行为越发猖狂 信息系统运维安全管理规定&#xff08;范文&#xff09;| 资料 过程: 14-16 草案初…...

Redis缓存问题(穿透, 击穿, 雪崩, 污染, 一致性)

目录 1.什么是Redis缓存问题&#xff1f; 2.缓存穿透 3.缓存击穿 4.缓存雪崩 5.缓存污染&#xff08;或满了&#xff09; 5.1 最大缓存设置多大 5.2 缓存淘汰策略 6.数据库和缓存一致性 6.1 4种相关模式 6.2 方案&#xff1a;队列重试机制 6.3 方案&#xff1a;异步更新缓…...

网络时代拟态环境的复杂化

信息在网络上的制作、编码、传播机制和传统媒介有本质的区别&#xff0c;即传播者和 受传者的角色交叉&#xff0c;而且互联网本身可看作另一个有别于现实环境的虚拟世界&#xff0c;因 此网络媒介所营造出的拟态环境在一定程度上独立于传统大众传播的拟态环境。 一个是传统…...

湘潭大学 湘大 XTU OJ 1055 整数分类 题解(非常详细)

链接 整数分类 题目 Description 按照下面方法对整数x进行分类&#xff1a;如果x是一个个位数&#xff0c;则x属于x类&#xff1b;否则将x的各位上的数码累加&#xff0c;得到一个新的x&#xff0c;依次迭代&#xff0c;可以得到x的所属类。比如说24&#xff0c;246&#…...

什么是视频的编码和解码

这段描述中&#xff0c;视频解码能力和视频编码能力指的是不同的处理过程。视频解码是将压缩过的视频数据解开并还原为可播放的视频流&#xff0c;而视频编码是将原始视频数据压缩成更小的尺寸&#xff0c;以减少存储空间和传输带宽。在这个上下文中&#xff0c;解码能力和编码…...

LeetCode 2681. Power of Heroes【排序,数学,贡献法】2060

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

AVL树的讲解

算法拾遗三十八AVL树 AVL树AVL树平衡性AVL树加入节点AVL删除节点AVL树代码 AVL树 AVL树具有最严苛的平衡性&#xff0c;&#xff08;增、删、改、查&#xff09;时间复杂度为O&#xff08;logN&#xff09;&#xff0c;AVL树任何一个节点&#xff0c;左树的高度和右树的高度差…...

Unity 之 Input类

文章目录 总述具体介绍 总述 Input 类是 Unity 中用于处理用户输入的重要工具&#xff0c;它允许您获取来自键盘、鼠标、触摸屏和控制器等设备的输入数据。通过 Input 类&#xff0c;您可以轻松地检测按键、鼠标点击、鼠标移动、触摸、控制器按钮等用户输入事件。以下是关于 I…...

亚信科技AntDB数据库连年入选《中国DBMS市场指南》代表厂商

近日&#xff0c;全球权威ICT研究与顾问咨询公司Gartner发布了2023年《Market Guide for DBMS, China》&#xff08;即“中国DBMS市场指南”&#xff09;&#xff0c;该指南从市场份额、技术创新、研发投入等维度对DBMS供应商进行了调研。亚信科技是领先的数智化全栈能力提供商…...

AMBA总线协议(3)——AHB(一)

目录 一、前言 二、什么是AHB总线 1、概述 2、一个典型的基于AHB总线的微处理器架构 3、基本的 AHB 传送特性 三、AMBA AHB总线互联 四、小结 一、前言 在之前的文章中我们初步的了解了一下AMBA总线中AHB,APB,AXI的信号线及其功能&#xff0c;从本文开始我们…...

Git commit与pull的先后顺序

Git commit与pull的先后顺序_git先pull再commit_Mordor Java Girl的博客-CSDN博客 ​ 编辑yucoang2020.04.21 回复 28 先pull再commit的话, 你的commit也就不再纯粹了. 这一个commit不再是"你所编辑的xxx功能, 而是"别人所编辑的你所编辑的xxx". 我认为提交历…...

HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制ForEach循环渲染

ForEach基于数组类型数据执行循环渲染。说明&#xff0c;从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 一、接口描述 ForEach(arr: any[], itemGenerator: (item: any, index?: number) > void,keyGenerator?: (item: any, index?: number) > stri…...

Powered by Paraverse | 平行云助力彼真科技打造演出“新物种”

01 怎么看待虚拟演出 彼真科技 我们怎么看待虚拟演出&#xff1f; 虚拟演出给音乐人或者音乐行业带来了哪些新的机会&#xff1f;通过呈现一场高标准的虚拟演出&#xff0c;我们的能力延伸点在哪里&#xff1f; 先说一下我们认知里的虚拟演出的本质&#xff1a; 音乐演出是一…...

企微配置回调服务

1、企微配置可信域名 2、企微获取成员userID 3、企微获取用户敏感数据 4、企微配置回调服务 文章目录 一、简介1、概述2、相关文档地址 二、企微配置消息服务器1、配置消息接收参数2、参数解析3、参数拼接规则 三、代码编写—使用已有库1、代码下载2、代码修改3、服务代码编写 …...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...