四、1、函数参数是按值传递还是按引用传递
2017-06-10 01:23
369 查看
参考链接:https://www.zhihu.com/question/27114726
http://bosn.me/js/js-call-by-sharing/
基本类型在函数参数中肯定是按值传递,重点是引用类型按什么传递?高程中给出的是不管是基本类型还是引用类型在函数参数中都是按值传递。但是出现了以下这种情况:
其中弹出的person.name为"Nicholas"。我开始的理解是,函数将person对象作为参数传递进去,是将person本身的值(person的值就是一个地址指针)赋值给了obj,obj有了和person一样的指针,也是指向同一个对象。修改obj的name,一是修改了对象的name值,person的指针指向的对象也会是修改值后的对象。
然后重写了obj这个变量,我觉得也会影响到它指针指向的这个对象。其实不是,obj被重新赋值新对象后,他的指针就变成了指向新的对象的指针,和person的指针没关系了。
看的资料里面将引用类型的参数传递成为按共享传递,其实我觉得按共享传递也是属于按值传递的一个范畴。只是这个引用类型传递给参数的是指针,而不是传递了整个对象进去,指针就是他们的值。当被传递指针的参数重新被赋予了新对象时,他的指针就变了指向新对象了,和当初指针就没有关系了。
http://bosn.me/js/js-call-by-sharing/
基本类型在函数参数中肯定是按值传递,重点是引用类型按什么传递?高程中给出的是不管是基本类型还是引用类型在函数参数中都是按值传递。但是出现了以下这种情况:
function setName(obj){ obj.name="Nicholas"; obj=new Object(); obj.name="Greg"; } var person=new Object(); setName(person); alert(person.name);
其中弹出的person.name为"Nicholas"。我开始的理解是,函数将person对象作为参数传递进去,是将person本身的值(person的值就是一个地址指针)赋值给了obj,obj有了和person一样的指针,也是指向同一个对象。修改obj的name,一是修改了对象的name值,person的指针指向的对象也会是修改值后的对象。
然后重写了obj这个变量,我觉得也会影响到它指针指向的这个对象。其实不是,obj被重新赋值新对象后,他的指针就变成了指向新的对象的指针,和person的指针没关系了。
看的资料里面将引用类型的参数传递成为按共享传递,其实我觉得按共享传递也是属于按值传递的一个范畴。只是这个引用类型传递给参数的是指针,而不是传递了整个对象进去,指针就是他们的值。当被传递指针的参数重新被赋予了新对象时,他的指针就变了指向新对象了,和当初指针就没有关系了。
相关文章推荐
- Java中函数参数的传递是值传递还是引用传递
- JavaScript 函数参数传递到底是值传递还是引用传递
- JavaScript 函数参数传递到底是值传递还是引用传递
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- python函数参数是值传递还是引用传递:取决于对象内容可变不可变
- JavaScript 函数参数传递到底是值传递还是引用传递
- Java中函数参数的传递是值传递还是引用传递
- Java中函数参数的传递是值传递还是引用传递
- 浅谈JavaScript 函数参数传递到底是值传递还是引用传递
- js中函数传递参数,究竟是值传递还是引用传递?
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- 深入理解python中函数传递参数是值传递还是引用传递
- JavaScript 函数参数传递到底是值传递还是引用传递 (精华)
- Java中函数参数的传递是值传递还是引用传递
- 深入理解python中函数传递参数是值传递还是引用传递
- Java中函数参数的传递是值传递还是引用传递
- JavaScript 函数参数传递到底是值传递还是引用传递
- JavaScript 函数参数传递到底是值传递还是引用传递
- JavaScript 函数参数传递到底是值传递还是引用传递
- JavaScript 函数参数传递到底是值传递还是引用传递