作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个小测试。我希望 obj\d
对象最终都更改了它们的 a
成员。但是 change1
样式不起作用,我想知道为什么,或者为什么不应该这样做?
<button id="btn1" onclick="test()">Change</button>
<script>
var obj1 = { a : {strblahblah: "blah"} };
var obj2 = { a : {strblahblah: "blah"} };
function test(){
change1(obj1.a);
change2(obj2);
alert("obj1: " + obj1.toSource() + "\r\nobj2: " + obj2.toSource());
}
function change1(obj){
obj = {str: "change1"};
}
function change2(obj){
obj.a = {str: "change2"};
}
</script>
结果(点击按钮后):
obj1: ({a:{strblahblah:"blah"}})
obj2: ({a:{str:"change2"}})
最佳答案
change1
中发生的事情是 obj
最初持有对 obj1.a
中对象的引用。但是,该行:
obj = {str: "change1"};
不改变 obj1.a
。相反,它会创建一个新对象 ({str: "change1"}
) 并更改 obj
以便它现在指向该对象而不是 obj1.a
.
相比之下,change2
有 obj
最初持有对 obj2
中对象的引用,并且有一行:
obj.a = {str: "change2"};
它访问引用对象(即 obj2
)的内部结构,从而对该对象进行实际更改。
关于javascript - Javascript 究竟是如何传递参数的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19047504/
Feel free to skip straight to TL/DR if you're not interested in details of the question 简短的序言: 我最近决定
我一直在阅读 A Tour of Go学习Go-Lang到目前为止一切顺利。 我目前在 Struct Fields类(class),这是右侧的示例代码: package main import "fm
Last time I got confused顺便说一下PowerShell急切地展开集合,基思总结了它的启发式如下: Putting the results (an array) within a
我是一名优秀的程序员,十分优秀!