2

配列を反復処理するときに関数を動的に作成しようとしていますが、現在のインデックスの値に従って配列内の引数を設定する必要があります。

例えば:

var array = ['apple','orange','banana'];

次の 3 つの機能が必要です。

function() { return 'apple' };
function() { return 'orange' };
function() { return 'banana' };

外部関数から構築された関数を返そうとしましたが、その式は評価されず、最終的に次の 3 つになります。

function() { return array[i] };

eval() を使用せずにそのような関数を動的に作成する方法はありますか?

4

3 に答える 3

0

これは機能しません。悪名高いループの問題を説明するために残します。

これを実現する最善の方法は、関数を作成する前にコンテキスト変数を作成することです。これがそれを示していることを願っていますhttp://jsfiddle.net/jkymq/

var array = ['apple','orange','banana'];
var methods = {}
for (pos = 0 ; pos < array.length; pos ++){
    var target = array[pos];
    var newMethod = function(){alert (target);}
    methods[target] = newMethod;
}
for (foo in methods){
    methods[foo]();
}
于 2013-07-01T08:44:48.523 に答える