09/06/04 17:30:37 N3LAFxc/
>>991
吉里吉里には JavaScript のような変数を自前で巻き込むクロージャは無い。
自前でコンテキストを作ってやれば似たことはできる。
てっとりばやくその場処理したければ辞書を使う
var func = [], i = 10;
while(i--)
func[i] = function { return i; } incontextof %[i:i];
Debug.message( func[4]() + ',' + func[5]() );
ただし、辞書のコンテキストはグローバルを自動的に参照してくれないので明示的な指定が必要になる。
× func[i] = function { Debug.message(i); } incontextof %[i:i]
○ func[i] = function { global.Debug.message(i); } incontextof %[i:i]
それから、存在しない変数を参照しようとしても常に void が帰ってくるためエラーにならない。
func[i] = function { return a; } incontextof %[i:i] // a は存在してないけど void が帰るのでエラーにならない
この挙動が嫌な場合はクラスを専用につくって対応すればいい
class Func { var i; function Func(i) { this.i = i; } function func() { return i;} };
func[i] = (new Func(i)).func;