actionscript-3 - 使用定义时定义的参数创建一组匿名函数

标签 actionscript-3

我正在尝试逐步重构现有代码。我有一组已定义的函数,仅在一个内部参数上有所不同:

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/

相关文章:

actionscript-3 - 一次使用多个 SQLite 数据库

javascript - ExternalInterface 调用使浏览器崩溃

javascript - 在网页上加载 Flash 横幅后添加 cookie

actionscript-3 - 对 AS3 ByteArray 进行排序

apache-flex - String(value) 和 value as String 有什么区别?

actionscript-3 - 如何在没有 mxml 的情况下在 Flash Builder 4 中创建 AIR 应用程序

actionscript-3 - Flashdevelop 调试器 - System.BadImageFormatException

apache-flex - 在弹性组件之间传递数据

ios - ActionScript 3 中 iPhone 的垂直滚动

actionscript-3 - ActionScript - 重写方法而不匹配签名?