值传递和地址传递

一个陷阱,引发一次深刻的思考,代码如下:

  1. var a = 11111;
  2. var b = {
  3.     pro: "test"
  4. }
  5. function fn(a,b){
  6.     a = 2222;
  7.     b.pro = "zhenn";   
  8. }
  9. fn(a,b);
  10. console.log(a)// 11111
  11. console.log(b)// b.pro = "zhenn"

在JavaScript中,除了Object,Array是地址引用,其他数据类型,诸如Number
、Boolean、String等都是值引用,这就是从陷阱中挖出的东西,同一个坑不能跳进去两次啊!杯具…

标签: ,

3 条评论 发表在“值传递和地址传递”上

  1. simaopig 说:

    哈哈,确实很容易让人陷进去。

    其实JavaScript函数传递参数时的都是值,但是值和值是不一样的。

    只不过引用类型的值里存的是“指针”。 http://www.xiaoxiaozi.com/2010/03/05/1719/

    [回复]

  2. Rekey 说:

    写错了.是

    console.log(b.pro); // b.pro = “zhenn”

    否则你打印对象..结果应该是[object]

    [回复]

    zhenn 回复:

    @Rekey,
    console.log(b); 显示的是对象的内部结构,后面注释只是为了说明b。pro的值

    [回复]

留下回复