基本类型和引用类型的值

    xiaoxiao2024-12-19  11

    ECMAScript变量中可能含有两种不同数据类型的值:

    基本类型值:保存在栈内存中的简单数据段

    引用类型值:保存在堆内存中的对象,变量中保存的实际上是指针,指向内存中保存变量的位置

    复制变量值

    基本类型值复制:如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的地址上。

     

    引用类型值复制:复制到新地址上的实际是一个指向堆内存的地址指针,新变量仍然指向原来的对象

     

    传递参数(Javascript中所有函数的参数都是按值传递的)

    function add(num) { num += 10; return num; } var a = 1; var result = add(a); alert(a); alert(result); // 以上代码的过程应该是 // 创建全局变量a // 创建局部变量 num ,将 a 复制给 num , add(num) 操作的是 num ,与a无关 // 创建 result ,复制num 给 result // add() 函数结束,num 被销毁 // 结果为 a=1 ; result=11 ;

    //引用属性:

    //引用属性 function setName(obj) { obj.name = "JS"; } var person = new Object(); setName(person); alert(person.name); // 创建全局对象person // 将person复制给局部的obj(地址),但obj指向的仍是原来的对象 // 最后原对象的name属性被修改

    证明对象是按值传递的

    function setName(obj) { obj.name = "JS"; //此时obj指向的是原对象,所以原对象的name被修改 obj = new Object(); //此时obj指向的是新对象 obj.name = "Aju"; //修改的是新对象的name //新对象是局部变量,函数执行结束时将被销毁 } var person = new Object(); setName(person); alert(person.name);

     

     

    参考书籍:《Professional JavaScript for Web Developers 3rd Edition》

     

     

    最新回复(0)