我试图理解闭包。你怎么解释这两种情况的行为。
情景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>
这两种情况不一样吗?为什么在第一个场景中外部函数只被调用一次,在第一次单击后,每次调用内部函数都被调用。
答案 0 :(得分:1)
在第一种情况下,您创建返回函数的函数句柄,然后调用该函数,以便使用的句柄方法是句柄内部的闭包,它跟踪闭包scop(count)中的变量。第二种情况是每次都返回一个新的闭包,因为调用handle()会返回一个新的闭包。因此,您正在重置每个按钮单击的范围,因为您正在创建一个使用handle()调用的新闭包。
答案 1 :(得分:0)
在第一种情况下,你正在评估函数,所以你得到的是内部函数,它会在每次调用时递增计数器。
然而,在第二种情况下,handle
包含外部函数,所以如果你调用它,你将获得内部函数,这反过来会在调用时递增计数器。
因此,当他们实际执行不同的事情时,两个片段都被称为handle
。