JavaScript:按值传递的理解
-
ECMAscript中所有的参数都是按值传递。不可能按引用传递。如果把整个对象作为参数传递,那么传递的值就是这个对象的引用。 -
function setName(obj){
obj.name = 'wcc';
obj = new Object();
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
|