我正在尝试逐步重构现有代码。我有一组已定义的函数,仅在一个内部参数上有所不同:
function loadGame1():void
{
loadGame("save1");
}
function loadGame2():void
{
loadGame("save2");
}
function loadGame3():void
{
loadGame("save3");
}
//... snip many, many lines
// Note- I cannot pass function arguments at this time!
picker(loadGame1, loadGame2, loadGame3 ...);
我正在尝试重构至少其中的一部分(我还不能完全替换整个事情,相互依赖太多)。
基本上,我希望能够生成一大组函数,函数之间的差异是一个内部参数:
var fNames:Array = new Array("save1", "save2", "save3");
var funcs:Array = new Array();
for (var i = 0; i < fNames.length; i += 1)
{
trace("Creating function with indice = ", i);
funcs.push(
function() : void
{
saveGame(fNames[i]);
}
)
}
picker(funcs[0], funcs[1], funcs[2] ...);
但是,据我所知,关闭导致状态
i
要在 for 循环的范围之外进行维护,并且任何调用任何生成函数的尝试都会失败并出现越界错误,鉴于 i
,这是您所期望的。将到达 fNames.size + 1
之前 i < fNames.size
评估为假。因此,基本上,鉴于我需要生成作为参数传递给我当前无法更改的预先存在的函数的函数。如何动态生成这些函数?
最佳答案
尝试使用 IIFE :
for (var i = 0; i < fNames.length; i += 1)
{
(function(i){
trace("Creating function with indice = ", i);
funcs.push(
function() : void
{
saveGame(fNames[i]);
}
)
})(i);
}
关于actionscript-3 - 使用定义时定义的参数创建一组匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19739366/