如何证明JavaScript中函数参数都是值传递
Posted 小小码农,可笑可笑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何证明JavaScript中函数参数都是值传递相关的知识,希望对你有一定的参考价值。
二话不说,上代码
function setName(obj)
obj.name = '小码农';
let coder = new Object();
setName(coder);
console.log(coder.name);//小码农
代码很简单,那我们思考下这里的obj和coder是什么关系?
我们把问题陈述详细点。我们都知道
- javascript的变量类型有两种,一种是原始类型,一种是引用类型。
- coder肯定是引用类型,正常我们说的引用类型的复制是复制引用,也就是指针(注)
- 那现在函数内的参数obj和coder是复制关系
那么问题来了,obj复制的是coder的引用吗?
思考下......
我们上代码
function setName(obj)
obj.name = '小码农';
obj = new Object();
obj.name = '百变码农'
let coder = new Object();
setName(coder);
console.log(coder.name);//小码农
没错,还是小码农。所以obj复制的不是coder的引用,而是值。
没理解?
我开始也是不理解的,请教了女朋友之后,一顿讲解,懂了。
其实我不理解的主要是因为不理解什么是引用传递。
无论是JavaScript还是java实际都是没有引用传递的,都是值传递。
我不想把引用传递复杂化。所以解释的简单一些。
如果是引用传递,那么setName方法中的参数obj实际就是coder,不是副本,不是另一个对象,仅仅是coder的别名,因此函数中实际操作的就是coder对象。所以,如果obj重新new了个对象,是引用传递的话,也就是coder将重新指向新的对象,那最后打印的就应该是百变码农。所以这个例子侧面证明了JavaScript中是没有引用传递的,都是值传递。
以上是关于如何证明JavaScript中函数参数都是值传递的主要内容,如果未能解决你的问题,请参考以下文章
254 在js调用函数时,传递变量参数时, 是值传递还是引用传递
讨论java中调用函数,形参的传递是值传递还是引用传递的问题