Professional javascript for web Developers 2nd Edition 学习笔记(1)

 

  •   原始值和引用值的复制问题

             看两个图吧

image image

                                                                     引用值的复制

   num1和num2是完全分离的,因为只是复制了值。两个变量可以分别使用,不会产生关联的影响。

  obj1和obj2是关联的,因为现在复制的是地址,指针会指向堆中的同一个对象。

  •  参数传递 

  在ECMAScript中所有的参数传递都是传值的,如下

function addTen(num) {
  num += 10;
  return num;
}
var count = 20;
var result = addTen(count);
alert(count); //20 - no change
alert(result); //30

函数addTen()有一个参数num,它实质上是一个局部变量。当调用的时候变量count作为一个参数被传递,变量值是20,它被复制到参数num中用于内部addTen()函数。在函数内部num的值加10,但是他并没有改变存在于函数外面的原始变量count的值。参数num和变量count互不相识,它们只是碰巧有相同的值。如果num作为引用类型传递,count的值也会改变为30.

function setName(obj) {
  obj.name = “Nicholas”;
}
var person = new Object();
setName(person);
alert(person.name); //”Nicholas”

function setName(obj) {
  obj.name = “Nicholas”;
  obj = new Object();
  obj.name = “Greg”;
}
var person = new Object();
setName(person);
alert(person.name); //”Nicholas”

上面两段代码说的是obj是通过引用类型访问一个对象的,但是在函数中它也是传值的。

用一句话来总结ECMAScript参数传递就是:在ECMAScript中,函数参数只不过是一个局部变量。

转载于:https://www.cnblogs.com/miaozi1123/archive/2009/06/04/1495957.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值