自己実行関数に渡される引数を変更できるようにしたいと考えています。
サンプルコードは次のとおりです。
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
は変更されていません。参照渡しのように、どうすれば変更できますか?
を渡しますobject
。これは参照渡しです:
var test = {
message: 'start'
};
(function (t) {t.message = 'end'} )(test);
alert(test.message)
参考までに、参照渡しでArray
もあります。
JavaScript でそれを行うことはできません (まあ、まさにそれです)。ただし、次のようなことができます。
var testBox = { test: "hello" };
(function(tb) { tb.test = "goodbye"; })(testBox);
alert(testBox.test); // "goodbye"
JavaScript には、関数呼び出しでの値渡しのみがあります。arguments
変数 (オブジェクトとパラメーター)のようなものにエイリアスを設定する特殊な方法は 1 つしかありません。
とはいえ、オブジェクト プロパティは (通常) 変更可能であるため、値を変更する関数が必要な場合にオブジェクト参照を渡すことができます。
テスト変数の値を引数として関数に渡しているだけです。引数の値を変更したら、テスト変数に割り当てる必要があります。
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);