var p = { name : "张三" } function people1(n){ return n; } function people2(n){ n.name = "李四"; return n; } function people3(n){ n = { name : "haojie" } console.log(n); return n; } var p1 = people1(p); // console.log(n); //报错,没有定义n console.log(p); //{name: "张三"} console.log(p1); //{name: "张三"} var p2 = people2(p); console.log(p); //{name: "李四"} console.log(p2); //{name: "李四"} var p3 = people3(p); console.log(p); //{name: "李四"} console.log(p3); //{name: "haojie"} console.log(p); //{name: "李四"} 函数在传参的时候,如果为对象传参,传递的是对象的引用地址 1.如果使用object.property给改变对象属性的时候,改变的是对象中的真正的数据 2.如果使用 n = { name : "haojie" } 的形式,相当于在函数内部开辟了一块控件给n对象,对象随着函数的销毁而销毁