我想知道我是否可以修改函数中的参数?
2 回答
对象和数组通过引用传递,对传递给函数的参数的更改将影响原始参数。所有其他类型的行为都像按值传递一样,您无法更改原始类型。
Javascript 会自动执行此操作 - 您不能像在某些其他语言中那样指定按值或按引用传递某些内容。如果您想通过引用传递某些内容,请将其放入数组或对象中并传递数组/对象。
示例 1(传递对象):
function myFunc(myObject) {
// this changes the original object
myObject.ready = true;
}
var obj = {ready: false;};
myFunc(obj);
// obj.ready == true - value is changed
示例 2(传递字符串):
function hello(str) {
str = str + " and goodbye";
alert(str);
}
var greeting = "Hello";
hello(greeting);
// greeting == "Hello" - value is unchanged
示例 3(在对象中传递字符串):
function hello(obj) {
obj.str = obj.str + " and goodbye";
alert(obj.str);
}
var o = {greeting: "Hello"};
hello(o);
// o.greeting == "Hello and goodbye" - value is changed
示例 4(传递一个数字):
function hello(num) {
num++;
alert(num);
}
var mynum = 5;
hello(mynum);
// mynum == 5 - value is unchanged
注意:有时令人困惑的一件事是字符串实际上是通过引用传递的(没有复制),但是 javascript 中的字符串是不可变的(您不能在 javascript 中更改字符串)所以如果您尝试修改字符串作为参数传递,更改后的值以新字符串结束,因此原始字符串不会更改。
我认为您的意思是要问“是否可以将值传递的参数更改为引用的参数?”
Javascript 本质上是对象的参考语言。像数字、布尔值和字符串这样的原语是按值传递的。如果您考虑 PhP(或其他一些人)如何更改按引用传递或值修饰符(IE 函数 passByRef( &refVar ) ),这对于 javascript是不可能的。这里有一篇很好的文章,关于有时 javascript 在传递某些对象时如何变得更加冷漠,以及您可能期望什么,以及如果它有帮助实际会发生什么。