Professional javascript for web Developers 2nd Edition 学习笔记(1)
-
原始值和引用值的复制问题
看两个图吧
引用值的复制
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中,函数参数只不过是一个局部变量。
posted on 2009-06-04 11:11 miaozi1123 阅读(164) 评论(0) 编辑 收藏 举报