【发布时间】:2015-12-09 04:05:07
【问题描述】:
考虑:
原始数据类型在 JavaScript 中按值传递。这意味着 当一个变量传递给一个变量时,它实际上是由一个副本组成 函数,因此该函数的任何本地操作都会离开 原始变量保持不变。
function fiddle(arg1) {
arg1 = "Fiddled with";
console.log("In function fiddle str = "+arg1+"<br>");
}
var str = "Original Value";
console.log("Before function call str = "+str+"<br>");
fiddle(str);
console.log("After function call str ="+str+"<br>");
简单
如果使用数组和对象等复合类型,则将它们传递 通过引用而不是值
考虑以下修改 之前的 fiddle() 函数:
function fiddle(arg1) {
arg1[0] = "Fiddled with";
console.log("In function fiddle arg1 = "+arg1+"<br>");
}
var arr = ["Original", " Original ", " Original "];
console.log("Before function call arr = "+arr+"<br>");
fiddle(arr);
console.log("After function call arr ="+arr+"<br>");
到此为止
从这里我发现自己真的很困惑,
function fiddle(arg1) {
arg1 = ["Blasted!","Blasted!"];
console.log("In function fiddle arg1 = "+arg1+"<br>");
}
var arr = ["Original", " Original ", " Original "];
console.log("Before function call arr = "+arr+"<br>");
fiddle(arr);
console.log("After function call arr ="+arr+"<br>"); // Why this hasn't changed?
有什么建议吗?而且可以说
如果使用数组和对象等复合类型,则将它们传递 通过引用而不是值
在这种情况下也是?
【问题讨论】:
-
如果您使用
arg1.push("Blasted!","Blasted!");,则对原始数据进行更改,但您正在使用arg1 = []在小提琴内部创建一个新数组。 -
分配给一个名字与改变名字碰巧引用的对象不同。前者仅更改名称绑定。后者是对象。
标签: javascript