JavaScript:按值传递的理解
-
ECMAscript中所有的参数都是按值传递。不可能按引用传递。如果把整个对象作为参数传递,那么传递的值就是这个对象的引用。
-
function setName(obj){ obj.name = 'wcc'; obj = new Object();//函数执行完毕后,就销毁掉了 obj.name = 'hzm'; //console.log(obj);//{name:hzm} } let testObj = {}; setName(testObj); console.log(testObj);
- 理解思路
- 函数里的obj只是拷贝了一份testObj栈内存中的指针,
- 第一次操作obj.name时,操作的是指针指向testObj在堆内存存储的数据。
- 重新创建对象并赋值给obj的时候,obj的指针指向新的堆空间。
- 第二次操作obj.name时,操作的是新开辟的堆内存存储的数据。
- 理解思路
-
如果是按引用传递会出现什么效果呢?
- 首先传参,传入不再是栈内存的指针,而是直接传入了指针指向的堆内存
- 当执行obj = new Object()时,会重写当前堆内存中的存储内容
- 函数执行完后,打印console.log(testObj),会返回{name:‘hzm’}
-
总结:
- 以上就是JavaScript按值传递的个人理解
- 如有误差,敬请评论区指正,谢谢!
目标,对一个人真的很重要!
cheers