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)基本类型在赋值的时候拷贝值,引用类型在赋值的时候只拷贝地址,不拷贝值。
  • 相关阅读:
    解决全局变量共享---C语言的extern关键字用法
    VIM学习笔记
    测试博客
    docker容器中安装vi
    docker中安装Jenkins
    Jenkins Pipeline+Maven+Gitlab持续集成构建问题集锦
    jenkinsapi操作Jenkins,提示:No valid crumb was included in the request
    python语言的jenkinapi
    Jenkins Pipeline+Maven+Gitlab持续集成构建
    windows中卸载Jenkins
  • 原文地址:https://www.cnblogs.com/pp-yang/p/12121817.html
Copyright © 2011-2022 走看看