函数参数是什么传递

很早的问题,记录一下

function fn(a, b ,c) {
	a = a * 10;
	b.item = 'changed'
	c = { item: 'changed'}
}

var num = 10;
var obj1 = {item: 'unchanged'}
var obj2 = {item: 'unchanged'}
fn(num, obj1, obj2)

参数是按值传递的,但是传递的值,本身就是一个引用,技术上来说,这是按共享传递
对象参数的传递实际上是一个对象的地址。
当我们改变值本身的时候,不会对该值造成改变;但是修改值的内部属性的时候,会导致值的变化

1. 调用函数,拷贝实参给形参
2. 函数内部操作的是函数的局部变量,不影响实参的值
3. 修改值的属性,实际是通过地址找到对象并修改对象的值,则会影响到实参

原文地址:https://www.cnblogs.com/huangjunjia/p/13068153.html