我希望能够修改传递给自执行函数的参数。
以下是一些示例代码:
var test = 'start';
(function (t) {t = 'end'} )(test);
alert(test) //alerts 'test'
here is a fiddle。变量test
没有改变。我如何改变它,如传递参考?
答案 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);