我在任何程度上都搜索并阅读了有关函数的内容。我已经看到我的问题得到了解答,但不是我理解的细节。编程不到一年。 好的,所以我不明白r,c或e是如何得到价值的。 Javascript如何知道在以后调用代码时使用“r”和“c”的内容。 “e”如何在最终功能中结束? 也许我试图理解这一点时拍得太高,但也许不是。感谢
game.makeKeydown = function (r, c) {
return function (e) {
return game.onKeydown(e, r, c);
};
};
答案 0 :(得分:1)
r
和c
变量是在game.makeKeydown
被调用时确定的。例如,var fn = game.makeKeydown(1, 2);
将返回一个函数,r
和c
的值分别为1和2。
fn
也会接受一个值,该值将成为e
的值,因此fn("s")
会将值"s"
提供给e
。
顺便说一下,将值分配给r
和c
的机制称为“闭包”。
答案 1 :(得分:1)
这是一种名为currying (partial function application)的技术。
所以你有一个函数game.onKeydown
,它有三个参数。你想要一个带有一个参数的函数,因为你现在知道两个参数。值r
和c
会在makeKeydown
内分配本地值,并且在实际调用新函数e
时会分配值makeKeydown
。
上面的链接是John Resig关于currying(推荐)的文章。
答案 2 :(得分:0)
我非常业余,但这是我对此的理解:当您将参数传递给函数时,该函数将替换您用于使用您传递的值命名参数的变量的所有实例作为参数。所以这个函数正在做的是创建一个具有固定值r和c的函数,以及一个附加参数e,您可以稍后通过这个新函数来创建它。
答案 3 :(得分:0)
简而言之,您拥有的代码是closure。构造内部函数并在调用外部函数时返回。因此,当使用参数makeKeydown
和r
调用外部函数c
时,它们在构造内部函数时可用。
内部函数只接受一个参数e
,它可能是传递给事件处理程序的事件对象。因此,
game.makeKeyDown( 2, 4 )
将返回一个可以保存在var
中的函数。这个新函数只用一个参数调用,如下所示:
var handler = game.makeKeydown(1,2);
var result = handler(4)