什么';这个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)在示例1中调用number()
时执行code>
在示例2中num++每次调用函数时都会执行代码>。因此,它将随着每次调用而增加。示例1初始化为var num=1
然后随着num++的增加而增加代码>。无论您调用第一个函数的频率有多高,因为num
的值不会再次更改,它将始终为2。只有console.log(num)在示例1中调用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