【问题标题】:Closure and anonymous function in javascriptjavascript中的闭包和匿名函数
【发布时间】:2017-09-09 16:51:35
【问题描述】:

我正在尝试理解闭包。您将如何解释这两种情况的行为。

场景 1

<input type="button" value="Click me" onclick="alert(handle())"/>
<script>
var handle = (function(){
  var count = 0;
  return function(){
    return ++count ;
  }
})();
</script>

场景 2

<input type="button" value="Click me" onclick="alert(handle()())"/>
<script>
var handle = function(){
  var count = 0;
  return function(){
    return ++count ;
  }
};
</script>

两种情况不一样吗?为什么在第一种情况下仅调用一次外部函数,并且在第一次单击后,每次单击都会调用内部函数。

【问题讨论】:

标签: javascript closures anonymous-function


【解决方案1】:

在第一种情况下,您创建返回函数的函数句柄,然后调用该函数,以便使用的句柄方法是句柄内部的闭包,它跟踪闭包 scop(count) 中的变量。第二种情况你每次都返回一个新的闭包,因为调用 handle() 返回一个新的闭包。因此,您正在重置每个按钮单击的范围,因为您正在创建一个要使用 handle() 调用的新闭包。

【讨论】:

    【解决方案2】:

    在第一种情况下,你正在评估函数,所以你得到的是内部函数,每次调用它都会增加计数器。

    然而,在第二种情况下,handle 包含外部函数,因此如果您调用它,您将获得内部函数,而内部函数又会在调用时递增计数器。

    所以这两个 sn-ps 都被称为handle,实际上它们在做不同的事情。

    【讨论】:

    • 第一种情况,每次点击按钮,计数值加1。
    • 你是对的@VivekT 我的解释不正确。我编辑了答案,现在我认为它反映了现实
    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2016-07-30
    • 2011-05-08
    • 2016-09-09
    • 1970-01-01
    • 2012-05-10
    相关资源
    最近更新 更多