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)基本类型在赋值的时候拷贝值,引用类型在赋值的时候只拷贝地址,不拷贝值。
  • 相关阅读:
    了解web前端基本常识
    解决移动端输入法挡住输入框的办法
    简单实现根据选项显示不同的表单
    关于“使用本服务器,放到正规的第三方服务器就不安全”的想法
    简单实现网页换肤功能
    Java项目引入eclipse注意事项
    hexo博客发布注意事项
    hexo博客出现“Cannot GET/xxxx”的错误
    C#中ToString()格式详解
    SQLSERVER 时间日期函数,查询今天日期、昨天、一个星期、半年前的数据
  • 原文地址:https://www.cnblogs.com/pp-yang/p/12121817.html
Copyright © 2011-2022 走看看