js的命名规则,原始值和引用值的区别

原始值和引用值的存放数据的位置不同 

原始值的数据存在栈stack中,原始值相互赋值就相当于拷贝一样,其中改变某一个变量的值,结果是变了的;而引用值得数据存在堆内存heap中,栈存放着目标堆内存的地址,引用值的相互赋值就相当于地址的赋值,指向同一个堆内存,之后结果不变的。下面就以一个例子来说明:

原始值:

<%--
  Created by IntelliJ IDEA.
  User: LENOVO
  Date: 2019/9/13
  Time: 15:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
    <script type="text/javascript">
      var a = 10;
      var b = a;
      a = 20;
      document.write(a,b)
    </script>
  </head>
  <body>
  $END$
  </body>
</html>

输出结果:2010 .之前a值是10,而把a的值拷贝给b,之后再改a的值为20.所以a=20,b=10.

原理:一个栈取名a,存储的数据时10;一个栈取名b,存储的数据是b = a.之后会再申请一个栈取名也是a,存储的数据是20.之后第一个a就返回之前未占用的栈了。就是相当于释放了第一个a的栈了。遵循的js原始值的基本语法。如图:

 

引用值: 

<%--
  Created by IntelliJ IDEA.
  User: LENOVO
  Date: 2019/9/13
  Time: 15:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
    <script type="text/javascript">
      var a = [1];
      var b = a;
      b.push(2,3);
      document.write(a,b)
    </script>
  </head>
  <body>
  $END$
  </body>
</html>

输出结果:1,2,31,2,3.  数组a中只存储1,【1】是存储在堆内存中,而a是栈内存,栈中存储的是堆内存的地址。从而var b =a,是把a中的地址复制给b,之后b和a这两个栈都是存储这个地址,指向同一个堆。之后b在这个堆改变数据时,整个数组都会改变了的。所以打印a和b数组出来,它们的值都是一样的。如图分析:

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值