JavaScript二维数组和函数

article/2025/10/16 6:32:13

一、二维数组

1、什么是二维数组?

通过两个下标(索引)来确定一个元素。二维数组可以理解为数组的数组。二维数组组织为矩阵,可以表示为行和列的集合。

2、创建方式

2.1、通过new Array()创建
2.2、通过[]创建

3、如何访问二维元素

数组名[下标1][下标2]
一般默认情况;按行优先,即'下标1'为行下标,'下标2'是列下标

4、二维数组的转置

指的是将二维数组横向元素保存为纵向元素。

例如:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>var arr=[[1,2,3,9],[3,4,5,10],[6,7,8,11]]var res = []for(i=0;i<arr[0].length;i++){res[i]=[]for(j=0;j<arr.length;j++){res[i][j]=arr[j][i]}}    console.log(res)</script>
</body>
</html>

在二维数组在未转置前,此数组是一个三行四列的二维数组,转置后就变为了一个四行三列的二维数组。这就是二维数组的转置。

效果:
在这里插入图片描述

二、函数

1、什么是函数?

就是可以实现某种功能的代码块

2、关于函数的定义

function 函数名([参数]){函数体语句}

注意事项:
1、function是关键字
2、'函数名’是标识符,要符合JavaScript的标识符定义规则
3、‘参数’:函数可以有参数可以没有参数,但无论有没有参数,函数后的()都不能省略
4、{}:表示函数的作用范围,不能省略

3、函数的调用:

函数名([参数]

4、函数的分类:

4.1、根据有无返回值划分:

A、有返回值函数:在函数中含有return语句,通常使用某种运算,并将运算结果返回。在此也需要强调一下return的作用,(1)返回值的一个值;(2)从当前函数退出。

B:无返回值函数:在函数中没有return语句,通常函数只是实现某种功能,无需返回任何值。

4.2、根据函数有无参数划分:

有参函数:表示函数在实现某种运算或实现某种功能时,需要外部参数的参入。

例如:

function showArray(arr){ //arr是形参,没有实际值,只是占位符var str = ''for(var i=0;i<arr.length;i++){for(var j=0;j<arr[i].length;j++){str += arr[i][j] + '\t'}str += "\n"}console.log(str)}showArray(info) //函数的调用:info是实参,有实际的值

注意:实参将数据传递给形参,传递方向是单向的,即若形参发生了改变不会影响实参

关于函数的参数:形参和实参的个数可以不同

A、当实参数量多于形参数量时,函数正常执行,多余的实参会被忽略。

B、当实参数量小于形参数量时,多出来的形参类似于一个已声明未赋值的变量,其值为undefined。

C、arguments的使用:在定义函数时,每个函数都有一个隐含的内置对象arguments,在改对象中保存了函数调用时的所有实参。

例如:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>function sum(a,c){console.log("形参:a="+a+",c="+c)}sum(15,30,45)function sum(a,c){console.log("形参:a="+a+",c="+c)}sum(15)function num(){console.log(arguments)//输出函数调用时所传递的所有实参console.log(arguments.length)//arguments是一个数组console.log(arguments[1])//输出数组中下标(索引)为1的元素,输出第二个实参}num(1,3,5,7)</script>
</body>
</html>

测试如下:
在这里插入图片描述

5、函数表达式

5.1、将声明的函数赋给一个变量,通过变量完成函数的调用和参数的传递。
5.2、函数表达式格式:
  var 变量名=function([参数]){函数体语句}

函数表达式举例:

var sum = function (a,b){ //将一个匿名的函数赋给变量,通过该变量let c = 0for(i=a;i<b;i++){c+=i}return c
}
console.log(num(100,1000))

效果如下:
在这里插入图片描述

6、回调函数

6.1、什么是回调函数?

回调函数指一个函数A作为参数转递给函数B,然后在B函数体内调用A函数,此时A函数就是回调函数。

回调函数示例:

function sum(num1,num2,fn){//fn为函数,是函数sum的参数return fn(num1,num2)//调用fn,使num1,num2为fn的参数
}var s=sum(37,73,function(a,b){return a+b
})console.log(s)

结果展示:
在这里插入图片描述

7、函数的递归调用

1、什么是递归函数
如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。简单理解:函数内部自己调用自己, 这个函数就是递归函数
2、用递归解决问题的前提条件

2.1、问题可以分解:即可以将复杂问题分解为相对简单的问题

2.2、分解后得到一个新问题,新问题的解法与原问题的解法相同

2.3、分解问题时必须有明确的结束条件

3、递归函数的过程

第一步:自上而下的解决问题,第二步:自上而下回溯得到问题的解。

4、递归函数的示例:

4.1、输入斐波拉契数列前20项

function fn(n){if(n===1||n===2){return 1}else{return fn(n-1)+fn(n-2)}
}
var str = ''
for(i=1;i<=20;i++){str+=fn(i)+'\t'
}
console.log(str)

结果展示:
在这里插入图片描述
4.2、用递归函数计算1-100之和

function num(n){var sum = 0for(i=0;i<=n;i++){sum+=i}return sum
}
console.log(num(100))

结果展示:
在这里插入图片描述

三、作用域的分类

1、什么是作用域

作用域就是一个变量可以生效的范围,一个变量他不是在所有的地方都可以使用的,而这个变量的使用范围就是它的作用域。

2、全局变量

(1)在函数外部定义的变量

(2)在函数内部省略var关键字,声明的变量

3、局部变量:在函数内部使用var关键字声明的变量。只在函数内部有效

4、块级变量:在ES6(ECMAScript6)标准中提出的。是用户let声明的变量,只在语句块({})中有效

5、作用域链:当一个函数内部声明另一个函数时,首先会在当前作用域寻找,若未找到,则继续向上一层级的作用域中寻找,直到全局作用域,称这种链式的查询关系为作用域链。

六、立即调用的函数表达式:即立即调用匿名函数

1、格式

(function([参数]){ //匿名函数函数体语句})(); //在函数括号后加入双括号为立即调用此匿名函数

2、练习:定义函数,计算如下数列的前20项之和2/1、3/2、5/3、8/5…

(function(){var sum = 0var m = 1var s= 2for(i=1;i<=20;i++){sum=sum+s/mtrmp = ss = m+sm=trmp}console.log(sum)
})()

效果如下:
在这里插入图片描述

七、函数的一些使用建议

函数就是程序模块,建议函数的功能尽量单一化。在项目中模块之间应该是高内聚、低耦合(耦合:模块之间结合的紧密程度;内聚:模块内部结合的紧密程度)


http://chatgpt.dhexx.cn/article/6vVoh8Xb.shtml

相关文章

JavaScript之二维数组

JavaScript本身只支持一维数组&#xff0c;不支持直接定义二维数组&#xff0c;但是我们可以间接地实现二维数组 将一维数组的每个元素又定义为一个数组&#xff0c;即为数组中的元素也是数组&#xff0c;就是二维数组 <!DOCTYPE html> <html lang"en">…

Linux 信号signal\sigaction

转发&#xff1a;作者&#xff0c;故事狗 https://www.jianshu.com/p/f445bfeea40a Linux 信号signal 对于 Linux来说&#xff0c;实际信号是软中断&#xff0c;许多重要的程序都需要处理信号。信号&#xff0c;为 Linux 提供了一种处理异步事件的方法。比如&#xff0c;终端…

linux下sigaction函数,Linux sigaction函数 sa_flags的值

开始对sa_flags有疑问&#xff0c;网上搜到都是这一个程序&#xff0c;就复制来说事&#xff1a; 代码&#xff1a; 1 #include 2 #include 3 #include 4 #include 5 6 void show_handler (int sig) 7 { 8 printf ("i got signal %d\n",sig); 9 …

Linux signal、sigaction的使用总结

目录 一、什么是信号 二、信号的种类 三、信号的处理 —— signal()函数 四、信号处理 —— sigaction()函数&#xff08;扑获信号&#xff09; 五、扑获信号示例 一、什么是信号 信号是UNIX和Linux系统响应某些条件而产生的一个事件&#xff0c;接收到该信号的进程会相应地采取…

sigaction 函数

今天查一个问题&#xff0c;SIGWINCH的处理函数一直不执行&#xff0c;耽搁了不少时间&#xff0c;最后发现是另外一个地方也设置了&#xff0c;处理函数是另外的。。。。 顺便记录下使用例子&#xff1a; 使用 sigaction 函数&#xff1a; signal 函数的使用方法简单&#xf…

信号、signal 函数、sigaction 函数

文章目录 1.信号的基本概念2.利用 kill 命令发送信号3.信号处理的相关动作4.信号与 signal 函数4.1 signal 函数示例一4.2 signal 函数示例二 5.利用 sigaction 函数进行信号处理6.利用信号处理技术消灭僵尸进程 1.信号的基本概念 发送信号是进程之间常用的通信手段。信号用来…

linux sigaction详解

参看文档&#xff1a; https://blog.csdn.net/weixin_43743847/article/details/90299204https://blog.csdn.net/u010150046/article/details/77344438https://bbs.csdn.net/topics/370255407 一&#xff1a;函数原型介绍 int sigaction(int signum, const struct sigaction …

sigaction函数

#include <signal.h> int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact); //The sigaction() system call is used to change the action taken by a process on receipt of a specific signal. sigaction()系统调用用于改变进程在接收…

c语言sigaction,c语言信号处理sigaction

c语言信号处理sigaction (2011-04-18 23:45:19) 标签: c语言 信号处理 sigaction sighup it 分类: c 信号安装函数sigaction(int signum,const struct sigaction *act,struct sigaction *oldact)的第二个参数是一个指向sigaction结构的指针(结构体名称与函数名一样,千万别弄…

linux中sigaction函数详解

一、函数原型&#xff1a;sigaction函数的功能是检查或修改与指定信号相关联的处理动作&#xff08;可同时两种操作&#xff09; int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);signum参数指出要捕获的信号类型&#xff0c;act参数指定新…

Qt线程QThread详解

目录 前言1.QThread介绍2.QThread示例一3.QThread示例二4.线程同步 前言 在程序中使用线程可以提高程序的性能、并发性、响应性和稳定性&#xff0c;使得程序设计更加灵活和简单。但是&#xff0c;线程编程也有一些挑战&#xff0c;如线程安全性和死锁等问题需要格外注意。我们…

PyQT5 多线程 QThread

PyQT5 多线程 在常规的界面软件中&#xff0c;需要将UI线程和工作线程加以区分&#xff0c;主要原因是某些工作线程很复杂且耗时&#xff0c;比如下载某个文件或者长时间的计算&#xff0c;当执行这些进程时&#xff0c;UI主进程会被阻塞&#xff0c;界面会出现未响应的状态&a…

QThread之moveToThread用法

一、怎么用 使用一个QObject作为Worker&#xff0c;并moveToThread到线程上&#xff0c;那么这个QObject生存在此线程上&#xff0c;其信号会在此线程上发射&#xff0c;其槽函数在此线程上执行。 意味着什么&#xff0c;意味着多线程操作时&#xff0c;若通过信号槽方式&…

Qt 多线程编程的 QThread 类 (详细)

本文结构如下&#xff1a; 概述优雅的开始我们的多线程编程之旅 我们该把耗时代码放在哪里&#xff1f;再谈 moveToThread()启动线程前的准备工作 开多少个线程比较合适&#xff1f;设置栈大小启动线程/退出线程 启动线程优雅的退出线程操作运行中的线程 获取状态 运行状态线程…

QT之多线程(QThread)的简单使用

一、线程简述 线程&#xff08;thread&#xff09;是操作系统能够进行运算调度的最小单位。一条线程指的是进程中一个单一顺序的控制流&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。一个进程中可以并发多个线程&#xff0c;每条线程并行执行不同的任务…

Qt 之 QThread(深入理解)

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 为了让程序尽快响应用户操作,在开发应用程序时经常会使用到线程。对于耗时操作如果不使用线程,UI界面将会长时间处于停滞状态,这种情况是用户非常不愿意看到的,我们可以用线程来解决这个问题。 前面,已…

Qt线程:QThread

一、描述 一个QThread对象管理程序内的一个线程&#xff0c;QThreads在run()中开始执行。默认情况下&#xff0c;run()通过调用exec()启动事件循环&#xff0c;并在线程内部运行一个Qt事件循环。 可以通过使用 QObject::moveToThread() 将对象移动到线程来使用它们。 class W…

PyQt中的多线程QThread示例

PyQt中的多线程 一、PyQt中的多线程二、创建线程2.1 设计ui界面2.2 设计工作线程2.3 主程序设计 三、运行结果示例 一、PyQt中的多线程 传统的图形用户界面应用程序都只有一个执行线程&#xff0c;并且一次只执行一个操作。如果用户从用户界面中调用一个比较耗时的操作&#x…

【Qt】Qt的线程(两种QThread类的详细使用方式)

Qt提供QThread类以进行多任务处理。与多任务处理一样&#xff0c;Qt提供的线程可以做到单个线程做不到的事情。例如&#xff0c;网络应用程序中&#xff0c;可以使用线程处理多种连接器。 QThread继承自QObject类&#xff0c;且提供QMutex类以实现同步。线程和进程共享全局变量…

Qt - 一文理解QThread多线程(万字剖析整理)

目录 为什么需要多线程QThread使用方法new QThread Class & Override run()new Object Class & moveToThread(new QThread) connect事件循环源码分析如何正确退出线程堆栈大小优先级线程间通讯线程同步互斥锁读写锁信号量条件变量 可重入与线程安全QObject的可重入性开…