我希望能够修改传递给自执行函数的参数。
这是一些示例代码:
var test = 'start';
(function (t) {t = 'end'} )(test);
alert(test) //alerts 'test'
这是一个小提琴。变量test
没有改变。我怎样才能改变它,就像通过引用一样?
我希望能够修改传递给自执行函数的参数。
这是一些示例代码:
var test = 'start';
(function (t) {t = 'end'} )(test);
alert(test) //alerts 'test'
这是一个小提琴。变量test
没有改变。我怎样才能改变它,就像通过引用一样?
传入an object
,它是pass-by-reference:
var test = {
message: 'start'
};
(function (t) {t.message = 'end'} )(test);
alert(test.message)
仅供参考,Array
也是pass-by-reference。
你不能在 JavaScript 中做到这一点(嗯,确切地说)。但是,您可以执行以下操作:
var testBox = { test: "hello" };
(function(tb) { tb.test = "goodbye"; })(testBox);
alert(testBox.test); // "goodbye"
JavaScript 在函数调用中只有传值;只有一种极端的方法可以为变量(arguments
对象和参数)之类的东西取别名,而且它很奇怪,令人无趣。
也就是说,对象属性(通常)是可变的,因此您可以在需要函数来修改值的情况下传递对象引用。
你不能这样做。
您能做的最好的事情就是传入一个对象,然后更新该对象。
var test = { state: 'start' };
(function (t) {t.state = 'end'} )(test);
alert(test.state); // 'end'
您只是将测试变量的值作为参数传递给函数。更改参数的值后,您需要分配回测试变量。
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);