如何在javascript中创建动态函数?

时间:2015-11-25 17:57:29

标签: javascript arrays

我想用javascript动态创建一些函数。所有函数都做了特殊的工作,但使用了不同的数据(例如,console.log("data"))。

config = ['data1', 'data2', 'data3'];
returned = {};
for(var i in config){
    returned[config[i]] = function(){console.log(config[i])};
}

我上面的代码,所有函数必须记录一个数据,但不同的数据。我希望当我致电returned["data1"]()时,它会记录data1,但是当我致电returned["data1"]()时,它会记录data3

有可能吗?我该怎么办?

2 个答案:

答案 0 :(得分:2)

这可能就是你要找的东西。

var returned = {};
['data1', 'data2', 'data3'].forEach(function(element) { 
  returned[element] = function() { console.log(element); };
});

答案 1 :(得分:2)

config = ['data1', 'data2', 'data3'];
returned = {};
config.forEach(function(data){
    returned[data] = function(){
       console.log(data);
    };
});

修改

您还可以提取内部函数,以便提高内存效率:

config = ['data1', 'data2', 'data3'];
returned = {};

function doSpecialWork(data){
    console.log(data);
};

config.forEach(function(data){
    returned[data] = doSpecialWork(data);
});

修改2

你也可能变得愚蠢,但称自己为功能:

config = ['data1', 'data2', 'data3'];

function doSpecialWork(data){
    console.log(data);
};

returned = config.reduce(function(returned, data){
    returned[data] = doSpecialWork(data);

    return returned;
}, {});