Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40944
  • 博文数量: 30
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 310
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-10 07:50
个人简介

学会总结,积累

文章分类

全部博文(30)

文章存档

2014年(14)

2013年(16)

我的朋友

分类: JavaScript

2013-12-10 11:56:33

我的JS笔记是一些知识点,有些也会有例子来帮助理解。
JS中,所有函数的参数传递都是按值传递的
用例子来证明:

点击(此处)折叠或打开

  1. function changeStuff(num, obj1, obj2)
  2. {
  3.     num = num * 10;
  4.     obj1.item = "changed";
  5.     
  6.     obj2 = {item: "changed"};
  7. }
  8.  
  9. var num = 10;
  10.  
  11. var obj1 = new Object();
  12. obj1.item = "unchanged";
  13.  
  14. var obj2 = new Object();
  15. obj2.item = "unchanged";
  16.  
  17. changeStuff(num, obj1, obj2);

  18. alert(num); //10
  19. alert(obj1.item); //changed
  20. 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) |
给主人留下些什么吧!~~