Javascript;函数(x,y,z),对如何传递值感到困惑

Javascript; function (x,y,z), confused on how values are passed

本文关键字:何传递 函数 Javascript      更新时间:2023-09-26

我搜索和阅读关于函数的任何程度。我看到我的问题得到了回答,但还没有了解到细节。我学编程还不到一年。我不明白r c和e是怎么得到值的。Javascript如何知道在以后调用代码时使用"r"answers"c"做什么?"e"是如何在最后的函数中结束的?也许我对这个问题的理解有点过头了,但也许不是。由于

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

这是一种叫做套用(部分函数应用)的技术。

你有一个函数game.onKeydown,它有三个参数。你想要一个只有一个参数的函数,因为你现在知道了两个参数。值rcmakeKeydown内部被赋值,值e在实际调用新函数makeKeydown时被赋值。

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

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

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

顺便说一下,将值赋给rc的机制称为"闭包"。

我很业余,但这是我对这一点的理解:当您将参数传递给函数时,该函数将用作为参数传递的值替换用于命名参数的变量的所有实例。这个函数所做的就是创建一个固定值为r和c的函数,以及一个额外的参数e,稍后你可以把它传递给你刚刚创建的这个新函数

简单地说,您拥有的代码是一个闭包。内部函数被构造并在调用外部函数时返回。因此,当外部函数makeKeydown用参数rc调用时,它们在内部函数构造时可用。

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

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

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

var result = handler(4)