zoukankan      html  css  js  c++  java
  • JavaScript | 值传递、引用传递的区别

    值传递

    JavaScript值传递的数据类型:字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined),
    这五种数据类型是按值访问的,因为可以直接操作保存在变量中的实际值,JavaScript值传递的数据类型保存在栈内存中。
    
    <!DOCTYPE html> 
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script type="text/javascript">
            var a = 10;
            var b = a;
            document.write(b); //输出10
            a = 12; //变量重新赋值
            document.write(b); //输出10 说明a变量的改变未影响到b(值传递)
        </script>
    </head>
    <body>
    </body>
    

    引用传递

    JavaScript引用传递的数据类型:数组(Array)、对象(Object)、函数(Function())。JavaScript的引用数据类型是保存在堆内存中的对象。
    你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地址。所以,引用类型数据在栈内存中保存的实际上
    是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。
    
    <!DOCTYPE html> 
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script type="text/javascript">
            var array1 = [10,20,30];
            var array2 = array1;
            document.write(array2[1]); //输出20
            array1[1] = 100;
            document.write(array2[1]); //输出100 此处是引用传递(通过数组的方式)
        </script>
    </head>
    <body>
    </body>
    </html>
    

    总结

    JavaScript不同的数据类型决定不同的值传递类型。
    1)基本类型的变量保存的是变量值,引用类型的变量保存的是内存地址;
    2)基本类型长度固定,在内存中占据固定大小的空间,数据存放在栈内存中;引用类型可以给对象添加属性和方法,长度不固定,数据存放在堆内存中。
       引用类型的存储需要栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址;
    3)基本类型在赋值的时候拷贝值,引用类型在赋值的时候只拷贝地址,不拷贝值。
  • 相关阅读:
    Canvas API
    Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP
    Lind.DDD.LindMQ~关于持久化到Redis的消息格式
    MongoDB学习笔记~根据子集合里某个属性排序
    大叔最新课程~MVC核心技术剖析
    大叔最新课程~EF核心技术剖析
    hdu4300之KMP&&EKMP
    HDU 2594 Simpsons’ Hidden Talents KMP
    邮箱工具(尚未完成)的几个组件类
    java--折半查找
  • 原文地址:https://www.cnblogs.com/pp-yang/p/12121817.html
Copyright © 2011-2022 走看看