problem - 已解决 函数变量初始化问题

Posted 小车厂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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. 遍历函数中所有的变量声明

 

 

以上是关于problem - 已解决 函数变量初始化问题的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 检查变量是不是存在(已定义/初始化)

JavaScript 检查变量是不是存在(已定义/初始化)

函数范围的静态变量如何导致与共享库中函数代码的未来使用不兼容

返回引用的函数

std::atomic 作为类成员:使用 boost/python.hpp 时使用已删除的函数错误

js判断是否存在指定变量或函数