2

我搜索并阅读了有关功能的任何内容。我已经看到我的问题得到了回答,但不是我理解的细节。我编程还不到一年。好的,所以我不明白 r、c 或 e 是如何获取值的。当稍后调用代码时,Javascript 如何知道使用“r”和“c”来做什么。“e”如何在最终函数中结束?也许我试图理解这一点太高了,但也许不是。谢谢

game.makeKeydown = function (r, c) {
    return function (e) {
        return game.onKeydown(e, r, c);
    };
};
4

4 回答 4

1

rc变量在调用时确定game.makeKeydown。例如var fn = game.makeKeydown(1, 2);,将返回一个函数,其 和 的值r始终c分别为 1 和 2。

fn也将接受一个值,该值将成为 的值e,因此fn("s")将值"s"赋给e

顺便说一句,将值分配给rc称为“闭包”的机制。

于 2013-05-15T23:17:14.387 回答
1

这是一种称为柯里化(部分函数应用)的技术。

所以你有一个game.onKeydown接受三个参数的函数。您想要一个带有一个参数的函数,因为您现在知道两个参数。内部的值rc分配的局部值makeKeydown,并且在实际调用e新函数时分配值。makeKeydown

上面的链接是 John Resig 的一篇关于 currying 的文章(推荐)。

于 2013-05-15T23:19:27.100 回答
0

我很业余,但这是我对此的理解:当您将参数传递给函数时,该函数将使用您作为参数传递的值替换您用来命名参数的变量的所有实例。所以这个函数正在做的是创建一个具有固定值 r 和 c 的函数,以及一个附加参数 e,稍后您可以将其传递给您刚刚创建的这个新函数。

于 2013-05-15T23:21:23.027 回答
0

简而言之,您拥有的代码是一个闭包。当调用外部函数时,内部函数被构造并返回。因此,当makeKeydown使用参数r和调用外部函数时c,它们在构造内部函数时可用。

内部函数只接受一个参数,e它可能是传递给事件处理程序的事件对象。因此,

game.makeKeyDown( 2, 4 )将返回一个可以保存在var. 这个新函数将只使用一个参数调用,如下所示:

var handler = game.makeKeydown(1,2);

var result = handler(4)

于 2013-05-15T23:25:04.010 回答