var a = function(name) { name = 'a'; return name; }; var b = 'b'; a(b); console.log(b); // b var a1 = function(obj) { obj.name = 'a1'; }; var b1 = { name: 'b1', no: 'b1' }; a1(b1); console.log(b1); // Object {name: "a1", no: "b1"} var a2 = function(obj) { obj = { name: 'obj' }; return obj; }; var b2 = { no: 'b2' }; a2(b2); console.log(b2); // {no: 'b2'} var a3 = function(obj) { obj = 'a3'; return obj }; var b3 = { name: 'b3' }; var ret = a3(b3.name); console.log(b3); // Object {name: "b3"} console.log(ret); // a3
理解:
函数形参相当于重新定义了一个变量,给变量赋值基本类型或者指向引用类型。当函数内部给形参赋值引用类型时,相当于形参变量指向新的引用类型内存。
参考文章:
JavaScript并非“按值传递”