【problem

1 function setName (obj) {
2     //obj.name = "xiao";
3     obj = {};
4     obj.name = "che";
5 }
6 var person = {};
7 setName(person);
8 console.log(person.name);

问题:第 2 行不注释时,输出 “xiao” ;第 2 行注释时,输出 undefined 。

问题的解决引用类型在作为参数传递是也是值传递,这时参数和原引用的对象都指向堆中的同一个对象,但是在函数内部,对参数变量重新定义时,便指向了另一个对象,所以再对他的属性赋值并不改变原引用的对象。

参考资料JavaScript 传递参数是值传递?还是值传递啊?

 

另外:函数执行相关逻辑之前,初始化变量的过程:

  1. 遍历参数列表
  2. 遍历函数声明
  3. 添加arguments并赋值【这里不同浏览器表现差异较大,并不一定都是这样】
  4. 遍历函数中所有的变量声明
 
原文地址:https://www.cnblogs.com/xiaochechang/p/5850973.html