如何在javascript中使用引用传递

时间:2012-08-11 02:59:28

标签: javascript

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

2 个答案:

答案 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?