JavaScript数组 - 引用详解

基本数据类型详解

在学习数组引用详解前,我们先来看基本数据类型的详解

举个小例子:

我们声明一个a = 10;

然后声明一个函数,这个函数里面有个参数为a

把这个参数的a改成5,a = 5; 并且再加上alert(a);

函数外我们先去alert(a);

再调用这个函数把a写在里面传进去

再来一次alert(a);

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><script type = "text/javascript">var a = 10;function show(a){ a = 5; alert(a);          } alert(a); //10 show(a);//5          alert(a); //10    </script></head><body></body></html>

我们来看一下这三次调用的结果

第一次输出结果为10,第二次是调用的函数输出的结果为5,第三次输出的结果还是10

show函数调用的结果只限于这个范围

说明:

声明在当前函数中的变量和当前函数的形参,作用域都限制在该函数内

当函数调用结束以后,这些变量和形参可,会被释放

我们来分解看一下

首先红框中定义的a=10; 没有调用函数,并且alert输出的也是10,这个毫无疑问

在函数中,首先定义函数时,function show(a)这里面a的值首先被赋值成10;但是我们在函数体内把这个a的值修改为了5;这时的a就为5

函数调用结束,就会被销毁,我们最后再去alert(a);时,就会找到第一次声明的a,即为10

这是关于基本数据类型的详解

数组引用类型详解

来修改一下上面的小例子:

如果按照基本数据类型的解释

第一个alert和第三个alert应该是输出相同的的10,20

中间的show(); 函数调用的是输出的10,20,30,40

实际运行的结果我们来看一下

首先第一个alert输出的是10,20没问题

但是调用函数的alert和最后一个alert输出的结果是相同的10,20,30,40

这是因为什么呢?这就是因为数组是一个引用的数据类型

数组:复合数据类型/引用数据类型

注意:函数运行的内存空间是预先分配好的;一旦被分配好内存空间,就不能进行改变了

所有的复合数据类型都不直接存储在我们的函数中,它是存储在堆段

在堆段,我们可以想用多少内存,就随时分配多少内存;

但是在函数中是预先分配好的,不能修改

在我们上面例子中,一开始声明的数组10和20并不是存在一个变量中,而是存在堆段中

一个变量是存不下这些数的,更何况我们还要继续往数组中增加数值

10和20在我们内存中是需要占空间的,我们打个比方来说,10和20就相当于在住宾馆,住宾馆肯定要有房间号吧,当我们想要找到它时只需要记住房间号即可;假设10,20的房间号为888,那么arr只需要记住这个房间号888,最终当我们访问这个arr时,首先访问的就是888号,然后才能找到10,20;

所以在第一次输出的时候是10,20

然后呢我们去执行show函数,show函数中有个形参也叫arr,我们在show的函数体内对arr进行了赋值操作,实际上就是给888号房间赋值,所以函数show的arr赋值后也为888号;然后我们又给888号房间用push增加了两个数30,40,30,40同样也存储在了堆段中。

所以第二次调用的show函数是10,20,30,40

当我们的show函数执行完毕后,show函数就被释放掉了,销毁了;但是当我们最后一个alert再去访问arr时,arr的房间号888所对应的堆段中已经是10,20,30,40了

所以第三次alert所输出的函数也是10,20,30,40

我们要记住,所有的复合数据类型所存储的方式都是一个门牌号,也就是地址,再通过地址去访问数据

即,这类型的数据我们叫做引用数据类型

理解了引用的概念后,我们就可以给冒泡排序和选择排序就可以对他进行封装函数

封装排序方法

利用排序中的例子来看

将循环放在函数体内

封装冒泡排序:

调用函数即可看到相应的排序

由于数组是引用数据类型,所以我们不需要return返回值

因为我们通过这种方式修改的数组就是原来的数组

封装选择排序:

将这两个排序写在一个新的js文件中

我们想要用到这两个排序算法的时候就可以直接引用这个两个函数bubble()和choose()

直接调用函数就ok

(0)

相关推荐

  • JavaScript(1) -- JS入门

    JavaScript(1) -- JS入门

  • Excel使用技巧之数组计算公式详解1

    Excel使用技巧之数组计算公式详解1

  • JavaScript this 关键字详解

    一.前言 this关键字是JavaScript中最复杂的机制之一.它是一个很特别的关键字,被自动定义在所有函数的作用域中.对于那些没有投入时间学习this机制的JavaScript开发者来说,this ...

  • 数组越界及其避免方法,C语言数组越界详解

    所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之一. 在 C 语言中,数组必须是静态的.换而 ...

  • 2021Java春招面试真题详解,java引用变量有两种类型

    Java基础 1.JAVA 中的几种数据类型是什么,各自占用多少字节. 2.String 类能被继承吗,为什么. 3. 两个对象的 hashCode() 相同,则 equals() 也一定为 true ...

  • FFplay文档解读-2-语法详解采用以下引用和转义机制

    前言 Github地址:Github 简书地址:简书 专辑地址:FFplay专辑 4.语法 本节介绍FFmpeg库和工具使用的语法和格式. 4.1引用和转义 FFmpeg采用以下引用和转义机制,除非明 ...

  • JavaScript事件详解A(兼容性)

      课程大纲  1.事件基础 2.事件处理函数( console.log ); 3.事件对象 4.事件默认行为及阻止方式 5.DOM2级时间处理 6.事件委托机制 我们依次来学习   事件基础  Ja ...

  • JavaScript事件详解B - 坐标

      事件对象常用的属性  当触发某个事件时,会产生一个事件对象,这个对象包含着所有与事件有关的信息.包括导致事件的元素.事件的类型.以及其它与特定事件相关的信息. 通过事件绑定的执行函数是可以得到一个 ...

  • JavaScript 中的时间处理详解

    JavaScript 中的时间处理详解

  • JavaScript中的this详解

    this关键字表示对象 在方法中,this表示该方法所属的对象: 如果单独使用,this表示全局对象: 在函数中,this表示全局对象: 在函数中,在严格模式下,this是未定义的(undefined ...