我想知道我是否可以修改函数中的参数?
答案 0 :(得分:1)
对象和数组通过引用传递,对传递给函数的参数的更改将影响原始对象。所有其他类型的行为类似于按值传递,您无法更改原始类型。
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中更改字符串)所以如果你试图修改作为参数传递的字符串,更改的值以新字符串结尾,因此原始字符串不会更改。
答案 1 :(得分:0)
我认为您的意思是“是否可以将值传递参数更改为引用参数?”
Javascript本质上是通过对象的引用语言传递的。数字,布尔值和字符串等基元按值传递。如果您考虑PhP(或其他一些人)如何通过引用或值修饰符(IE函数passByRef(& refVar))来改变传递,则使用javascript无法使用 。这里有一篇很好的帖子,关于有时javascript在传递某些对象和你可能期望的时候会更加无关紧要,以及如果它有所帮助,实际会发生什么。
Is JavaScript a pass-by-reference or pass-by-value language?