【问题标题】:Javascript; function (x,y,z), confused on how values are passedJavascript;函数 (x,y,z),对如何传递值感到困惑
【发布时间】:2013-05-15 23:09:16
【问题描述】:

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

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

【问题讨论】:

    标签: javascript function return


    【解决方案1】:

    这是一种称为currying (partial function application)的技术。

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

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

    【讨论】:

    • 所有的答案都有帮助,谢谢大家... 这个问题一针见血,符合我的理解。
    • 哎呀,对不起...我正在学习这个网站。所以这段代码会将row和col的值放入c,r """ elem.onkeydown = game.makeKeydown(row, col);"""
    • 太好了,谢谢。文章也不错!我现在可以更轻松地遵循功能。我希望我可以开始更有效地应用它们,应该不会太长。
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢,现在我知道要搜索什么来获得更多深度 =)
    【解决方案3】:

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

    【讨论】:

    • 感谢您的帮助!有时,业余爱好者可以比专业人士更好地帮助新手。您的回答也完全正确,出于某种原因,我能够更好地理解第一个。
    【解决方案4】:

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

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

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

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

    var result = handler(4)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多