基本类型和引用类型的值

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值