什么';这个javascript闭包的区别是什么?

什么';这个javascript闭包的区别是什么?,javascript,closures,Javascript,Closures,(在num++中)以下各项之间有什么区别: 及 为什么第一个代码不记得num的值 为什么它是2而不是1?因为在第一个示例中运行number()时,num++不会再次执行,因为它不在该函数中。因为在第一个示例中运行number()时,num++不会再次执行,因为它不在该函数中。示例1用var num=1初始化然后随着num++的增加而增加。无论您调用第一个函数的频率有多高,因为num的值不会再次更改,它将始终为2。只有console.log(num) 在示例2中num++。因此,它将随着每次调用而

(在
num++
中)以下各项之间有什么区别:

为什么第一个代码不记得
num
的值


为什么它是2而不是1?

因为在第一个示例中运行
number()
时,
num++
不会再次执行,因为它不在该函数中。

因为在第一个示例中运行
number()
时,
num++
不会再次执行,因为它不在该函数中。

示例1用
var num=1初始化
然后随着
num++的增加而增加。无论您调用第一个函数的频率有多高,因为
num
的值不会再次更改,它将始终为2。只有
console.log(num)number()
时执行code>


在示例2中
num++。因此,它将随着每次调用而增加。

示例1初始化为
var num=1
然后随着
num++的增加而增加。无论您调用第一个函数的频率有多高,因为
num
的值不会再次更改,它将始终为2。只有
console.log(num)number()
时执行code>


在示例2中
num++。因此,它会随着每次呼叫而增加。

事实上,它确实记得很清楚。num的变量名值始终为2,无论您坚持调用它多少次;i、 e:执行返回的变量名编号的闭包

它将永远保持2

这是因为在第一个函数中,你的闭包

  • 没有保留num变量

  • 不会导致数值增加

  • 每个调用都将返回主机函数(num++)增加的结果,该结果只发生过一次。它的值已经是2

  • 如果调用numberGenerator,也是一样的,因为num值将被重新声明/重置为1,然后增加,并在下一次声明时自赋值为2


    所以,没有区别,只是第一个闭包不能增加num变量的值,因为它没有他想要的意思。

    事实上它确实记得很清楚。num的变量名值始终为2,无论您坚持调用它多少次;i、 e:执行返回的变量名编号的闭包

    它将永远保持2

    这是因为在第一个函数中,你的闭包

  • 没有保留num变量

  • 不会导致数值增加

  • 每个调用都将返回主机函数(num++)增加的结果,该结果只发生过一次。它的值已经是2

  • 如果调用numberGenerator,也是一样的,因为num值将被重新声明/重置为1,然后增加,并在下一次声明时自赋值为2


    因此,没有区别,只是第一个闭包中的闭包不能增加num变量值,因为它没有增加num变量值的意思。

    在函数调用时(var number=numberGenerator),闭包“checkNumber()”可以访问局部变量“num”,并保留该值,即使该值使用num++递增。闭包可以直接访问局部变量“num”,并在每次使用变量“number”访问闭包时对其进行更改。这仅在num++位于闭包内部时有效,因为闭包可以直接访问它所包含的函数中的局部变量。道格拉斯·考克福德(Douglas Cockford)的书《JavaScript:好的部分》在创建和理解闭包方面帮助了我很多。

    我希望这有帮助

    在调用函数时(var number=numberGenerator),闭包'checkNumber()'可以访问局部变量'num',并且即使在使用num++递增该值后仍保留该值。闭包可以直接访问局部变量“num”,并在每次使用变量“number”访问闭包时对其进行更改。这仅在num++位于闭包内部时有效,因为闭包可以直接访问它所包含的函数中的局部变量。道格拉斯·考克福德(Douglas Cockford)的书《JavaScript:好的部分》在创建和理解闭包方面帮助了我很多。

    我希望这有帮助

    好极了。所以num是2而不是1的原因是,在最初分配number时,它在return关键字之前递增。在调用数字时,它只会执行并记住内部函数中的内容??!杰出的所以num是2而不是1的原因是,在最初分配number时,它在return关键字之前递增。在调用数字时,它只会执行并记住内部函数中的内容??!
    function numberGenerator() {
      // Local “free” variable that ends up within the closure
      var num = 1;
      function checkNumber() { 
        console.log(num);
      }
      num++;
      return checkNumber;
    }
    
    var number = numberGenerator();
    number(); // 2
    number(); // 2
    number(); // 2
    
    function numberGenerator() {
      // Local “free” variable that ends up within the closure
      var num = 1;
      function checkNumber() { 
        console.log(num);
        num++;
      }
      return checkNumber;
    }
    
    var number = numberGenerator();
    number(); // 1
    number(); // 2
    number(); // 3