我的JS笔记是一些知识点,有些也会有例子来帮助理解。
JS中,所有函数的参数传递都是按值传递的
用例子来证明:
-
function changeStuff(num, obj1, obj2)
-
{
-
num = num * 10;
-
obj1.item = "changed";
-
-
obj2 = {item: "changed"};
-
}
-
-
var num = 10;
-
-
var obj1 = new Object();
-
obj1.item = "unchanged";
-
-
var obj2 = new Object();
-
obj2.item = "unchanged";
-
-
changeStuff(num, obj1, obj2);
-
-
alert(num); //10
-
alert(obj1.item); //changed
-
alert(obj2.item); //unchanged
第一,看到num的返回结果仍然是‘10’,这说明函数(A)参数是值类型的时候,在函数(A)内部改变参数的值,在函数外部是不会体现出来的——————结论:参数是值类型是,函数参数按值传递
第二,看到obj1的返回结果是‘changed’, 为什么会把在函数(A)里对参数属性的修改传递到外面来呢?先不要先入为主,我们看看具体过程。实际上你是把 对{item : 'unchanged'}的引用:obj1 作为参数来传递的,那么在函数内部引用这个参数obj1时, 他也是对 {item : 'unchanged'}的引用。然后'obj1.item = changed'替换了{item : 'unchanged'}这个原始对象的‘item’属性,所以看上去,我们似乎会觉得这不是参数按值传递,而是参数按引用传递。
第三,传递obj2这个参数时,是和传递obj1一样的,把对{item : 'unchanged'}的引用: obj2作为参数传递,在函数(A)内部,我们让obj2重新指向了一个新的对象{
item: "changed"},这个时候函数(A)里面的obj2被重新赋值(值被改变),但函数(A)外面的obj2的值 仍然没有被改变。(证明不是把引用传递了过去,不然的话,外面的obj2也会跟着改变)
阅读(382) | 评论(0) | 转发(0) |