• javascript_变量


    首先说说变量,JavaScript变量可以用来保存两种类型的值:基本类型和引用类型。

    1,基本类型很好理解,源于基本数据类型:underfined,null,boolean,number和string。也就是简单的数据段,基本类型在内存中占据固定大小的空间,因此保存在栈内存中,提到栈内存,就想到了进栈出栈压栈,先进后出。下图是栈模型,后面会具体写一篇数据类型的随笔。

    ,

    2,基本类型从一个变量向另一个变量时,会创建这个值的副本。

    var a1=8var a2=a1;

    a1是8,a2也是8,它的内存方式就像上面栈模型一样,a1在栈底,a2在它的上面,a1和a2是完全独立,所以对这两个变量操作相互不会影响
    3,引用类型,保存的值是对象,保存在堆内存中,它可以添加修改删除属性和方法。

    var person = new 0bject();
    person.name="cqy";
    console.log(person.name);     //"cqy"
    
    
    var person = "cqy";
    person.age="23";
    console.log(person.age);     //underfined

    上面我声明了一个对象person,添加一个name属性,赋值为cqy,打印出来name值为cqy,说明成功添加属性name并赋值,而下面字符串就不能增加属性。

    4,引用类型,当一个变量向另一个变量复制引用类型的值时,同样也会把值赋给新的变量中,这个值实际上是个指针,指针指向存储堆中的一个对象,

    我个人理解啊,堆内存可以说是个完全二叉树,这个我们把这个堆内存,看成一堆,也就相对一个盒子,在盒子里面有多个对象,复制前变量和复制后变量都指向堆里面同一个object对象,所以说这个值,实际就是个指针。所以改变一个变量就会影响到另一个变量。举例说明:

    var object1 = new Object();
    var object2 = object1;
    object1.name="cqy";
    alert(object2.name); //值为"cqy"

    5,传递参数,说白了也就是一个变量向另一个变量赋值,只不过这是从函数外部赋值到函数内部的过程。

    注意,在传递参数时只能按参数传递,而不能用引用传递。

    function setName(obj){
        ocj.name = "cqy";
        obj = new Object();//在局部重新定义一个对象,
        obj.name = "jbname";//定义了一个不同的name
    }
    var person = new Object();
    setName(person);
    alert(person.name);
    //如果按引用传递,person会自动修改为指向其name属性值为"jbname".
    //这就说明原始的引用依然保持不变,内部重写obj会在函数执行后立即销毁。
  • 相关阅读:
    Java实现 LeetCode 148 排序链表
    Java实现 LeetCode 148 排序链表
    Java实现 LeetCode 148 排序链表
    Java实现 LeetCode 147 对链表进行插入排序
    Java实现 LeetCode 147 对链表进行插入排序
    VC++的菜单控制和自绘菜单
    仅通过崩溃地址找出源代码的出错行
    积累的VC编程小技巧之框架窗口及其他
    积累的VC编程小技巧之图标、光标及位图
    积累的VC编程小技巧之视图
  • 原文地址:https://www.cnblogs.com/cqy1125/p/9865732.html
Copyright © 2020-2023  润新知