【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 传递参数是值传递?还是值传递啊?
另外:函数执行相关逻辑之前,初始化变量的过程:
- 遍历参数列表
- 遍历函数声明
- 添加arguments并赋值【这里不同浏览器表现差异较大,并不一定都是这样】
- 遍历函数中所有的变量声明