修改自执行函数中的参数

时间:2013-04-04 22:18:02

标签: javascript pass-by-reference anonymous-function self-executing-function

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

以下是一些示例代码:

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

here is a fiddle。变量test没有改变。我如何改变它,如传递参考?

4 个答案:

答案 0 :(得分:10)

传递object传递参考

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

仅供参考,Array传递参考

答案 1 :(得分:3)

你不能在JavaScript中做到这一点(好吧,正确)。但是你可以做这样的事情:

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

JavaScript只在函数调用中具有pass-by-value;只有一种角落案例方式可以使用变量(arguments对象和参数)之类的别名,而且无趣是非常奇怪的。

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

答案 2 :(得分:3)

你不能这样做。

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

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

答案 3 :(得分: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);