引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。
纠错:第一段,引用传递的定义说的就是地址传递。后面一句“person就会自动被修改为指向其name属性值为"Greg"的新对象”,怎么会修改呢?前面插入了新的赋值,一个在堆内存中完全的崭新的区块被创建出来了,自然地址值就发生了改变,obj这个以前的形参变量就被覆盖掉啦!这一步涉及到js中函数内部变量的优先级问题。与引用不引用没什么关系。函数内部修改了参数的值,原始的引用仍然不变,这个说法有问题,obj.name = "Nicholas",这本身就是在函数内部对堆内存对象的修改,怎么说原始的引用不变呢,明明变了好不好?后面的说法比较正确。不过局部对象一说有些问题,在js中只有局部变量一说,何来局部对象?当然你说变量是对象类型啊,所以称他为局部对象也解释的过去。不过终究这样说容易造成误导。当然要访问这个对象,的确只能通过该函数入口。
纠错:第二段尼古拉所谓的对象按值传递的说法并无错处,理由是地址值本身就是一个原始值,它是可以如同值传递一样被覆盖掉的。也即当一个引用类型的实参传进来的时候,它是将这个引用类型的指针所占用的一块内存复制给了形参,形参具有了一块跟实参一模一样的内存,但二者不是一个。当然它俩所指向的堆内存中的对象是一样的。这就是尼古拉所谓的值传递的核心含义。