Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript闭包和括号_Javascript_Closures - Fatal编程技术网

JavaScript闭包和括号

JavaScript闭包和括号,javascript,closures,Javascript,Closures,一, var incrementClickCounts=(函数(){ var-clickCounts=0; 返回函数(){ 返回++点击次数; } })()() 二, var incrementClickCounts=(函数(){ var-clickCounts=0; 返回函数(){ 返回++点击次数; } })() 我正在研究闭包,我遇到了这个例子。第二个示例通过在每次单击时增加clickCounts来正确工作,但第一个示例仅返回值“1” 我在区分如何使用括号正确调用函数时遇到了一些问

一,


var incrementClickCounts=(函数(){
var-clickCounts=0;
返回函数(){
返回++点击次数;
}
})()()
二,


var incrementClickCounts=(函数(){
var-clickCounts=0;
返回函数(){
返回++点击次数;
}
})()
我正在研究闭包,我遇到了这个例子。第二个示例通过在每次单击时增加clickCounts来正确工作,但第一个示例仅返回值“1”


我在区分如何使用括号正确调用函数时遇到了一些问题。

此表达式构建了一个函数:

  <script type="text/javascript">

  var incrementClickCounts = (function(){
  var clickCounts = 0;
  return function() {
    return ++clickCounts;
}
})()

</script>
<input type="button" value="clickkkk" onclick="alert(incrementClickCounts());" />
让我们称之为
递增函数

在第一种情况下,你需要

(function(){
 var clickCounts = 0;
 return function() {
   return ++clickCounts;
 }
})()
var incrementClickCounts = incrementFunction();
即调用函数并存储结果。每次单击按钮时,您都会发出
警报(递增ClickCounts)。因此,您只是在提醒初始调用
incrementFunction
的结果

在第二种情况下,你需要

(function(){
 var clickCounts = 0;
 return function() {
   return ++clickCounts;
 }
})()
var incrementClickCounts = incrementFunction();

这就是存储函数的方法。每次单击按钮时,都会发出
警报(递增ClickCounts())。因此每次都调用该函数。

在第一种情况下,
incrementClickCounts
包含一个数字;在第二种情况下,是一个函数。让我们来分析一下执行情况:

第一种情况:

var incrementClickCounts = incrementFunction;
因此:

将向“1”发出警报

第二种情况:

alert(incrementClickCounts)
因此:

将执行该函数并增加clickCounts

var incrementClickCounts = (function(){
  var clickCounts = 0;
  return function() {
    return ++clickCounts;
}
}) // declares a function
() // executes that function - 
   // returns another function that initializes clickCounts to 0 and increments it to 1
   // This function is stored in incrementClickCounts

// So incrementClickCounts contains a FUNCTION that you cal call to increment clickCounts
alert(incrementClickCounts())