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)基本类型在赋值的时候拷贝值,引用类型在赋值的时候只拷贝地址,不拷贝值。
  • 相关阅读:
    0309. Best Time to Buy and Sell Stock with Cooldown (M)
    0621. Task Scheduler (M)
    0106. Construct Binary Tree from Inorder and Postorder Traversal (M)
    0258. Add Digits (E)
    0154. Find Minimum in Rotated Sorted Array II (H)
    0797. All Paths From Source to Target (M)
    0260. Single Number III (M)
    0072. Edit Distance (H)
    0103. Binary Tree Zigzag Level Order Traversal (M)
    0312. Burst Balloons (H)
  • 原文地址:https://www.cnblogs.com/pp-yang/p/12121817.html
Copyright © 2011-2022 走看看