-3

我想知道我是否可以修改函数中的参数?

4

2 回答 2

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 中更改字符串)所以如果您尝试修改字符串作为参数传递,更改后的值以新字符串结束,因此原始字符串不会更改。

于 2012-08-11T04:13:50.647 回答
0

我认为您的意思是要问“是否可以将值传递的参数更改为引用的参数?”

Javascript 本质上是对象的参考语言。像数字、布尔值和字符串这样的原语是按值传递的。如果您考虑 PhP(或其他一些人)如何更改按引用传递或值修饰符(IE 函数 passByRef( &refVar ) ),这对于 javascript是不可能的。这里有一篇很好的文章,关于有时 javascript 在传递某些对象时如何变得更加冷漠,以及您可能期望什么,以及如果它有帮助实际会发生什么。

JavaScript 是按引用传递还是按值传递语言?

于 2012-08-11T03:12:08.080 回答