个人随笔
目录
如何理解JS的参数传递只会传递值,不会传递引用
2019-02-18 23:59:09

我们可以通过如下例子来理解:

1、参数绝对不可能是按引用传递的,绝对是按值来传递,都是复制了一份,引用也是,只不过引用的话他们指向的对象在堆内存中只有一个,而且是全局对象。
2、ECMAScript 中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。基本类型值的传递如同基本类型变量的复制一样,而引用类型值的传递,则如同引用类型变量的复制一样。

  1. var person =new Object();
  2. person.name='LWH';
  3. function setName(obj){
  4. //这里面的obj是复制了一份外面的引用传过来的,因为方法只能传递值(基本类型的值和引用类型的值)
  5. obj.name='MHM';
  6. alert(obj.name);
  7. }
  8. setName(person);
  9. alert(person.name);//这里肯定变成了MHM,因为虽然引用是复制过去的,但是指向的外部堆是同样的。
  10. function setName2(obj){
  11. //这里面的obj是复制了一份外面的引用传过来的,因为方法只能传递值(基本类型的值和引用类型的值)
  12. //这里的话因为是复制进来的,所以这个对象已经不影响外部的person对象中的值了,并且这个对象在函数执行外后,会被立即销毁
  13. obj=new Object();
  14. obj.name="MHM";
  15. alert(obj.name);
  16. }
  17. var person2 =new Object();
  18. person2.name='LWH';
  19. setName2(person2);
  20. alert(person2.name);//这里还是会打印LWH

结语

仔细理解,其实蛮好理解的,只要考虑引用也是值即可,引用类型值的传递,则如同引用类型变量的复制一样。这个跟java有不同,java是可以传递引用的,他的引用并不会复制一份传进来。

 485

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2