2

我希望能够修改传递给自执行函数的参数。

这是一些示例代码:

var test = 'start';
(function (t) {t = 'end'} )(test);
alert(test) //alerts 'test'

是一个小提琴。变量test没有改变。我怎样才能改变它,就像通过引用一样?

4

4 回答 4

10

传入an object,它是pass-by-reference

var test = {
    message: 'start'
};
(function (t) {t.message = 'end'} )(test);
alert(test.message)

仅供参考,Array也是pass-by-reference

于 2013-04-04T22:19:56.883 回答
3

你不能在 JavaScript 中做到这一点(嗯,确切地说)。但是,您可以执行以下操作:

 var testBox = { test: "hello" };
 (function(tb) { tb.test = "goodbye"; })(testBox);
 alert(testBox.test); // "goodbye"

JavaScript 在函数调用中只有传值;只有一种极端的方法可以为变量(arguments对象和参数)之类的东西取别名,而且它很奇怪,令人无趣。

也就是说,对象属性(通常)是可变的,因此您可以在需要函数来修改值的情况下传递对象引用。

于 2013-04-04T22:20:09.080 回答
3

你不能这样做。

您能做的最好的事情就是传入一个对象,然后更新该对象。

var test = { state: 'start' };
(function (t) {t.state = 'end'} )(test);
alert(test.state); // 'end'
于 2013-04-04T22:21:18.483 回答
0

您只是将测试变量的值作为参数传递给函数。更改参数的值后,您需要分配回测试变量。

var test = 'start';
(function (t){t = 'end'; test = t;} )(test);
alert(test) //alerts 'test'

或者

var myObject = {test: "start"};
var myFunc = function (theObject){
    theObject.test = 'end';
}(myObject);
alert(myObject.test);
于 2015-04-03T13:06:11.920 回答