Javascript 为什么一个计数器工作而另一个不工作';T(关闭?)
关于这个反例,我有两个问题Javascript 为什么一个计数器工作而另一个不工作';T(关闭?),javascript,Javascript,关于这个反例,我有两个问题 为什么addVersionOne不起作用?为什么它返回的是实际代码而不是数字 addVersionTwo如何工作?每次运行函数时,计数器不是被重置回0 const addVersionOne=function(){ 设计数器=0; 返回函数(){ 计数器+=1; 返回计数器; } } var addVersionTwo=(函数(){ 设计数器=0; 返回函数(){ 计数器+=1; 返回计数器; } })(); 函数writeVersionOne(){ documen
计数器
不是被重置回0
const addVersionOne=function(){
设计数器=0;
返回函数(){
计数器+=1;
返回计数器;
}
}
var addVersionTwo=(函数(){
设计数器=0;
返回函数(){
计数器+=1;
返回计数器;
}
})();
函数writeVersionOne(){
document.getElementById(“addVersionOne”).innerHTML=addVersionOne();
}
函数writeVersionTwo(){
document.getElementById(“addVersionTwo”).innerHTML=addVersionTwo();
}
页面标题
阿德维松
addVersionTwo
0
0
因为函数addVersionOne的返回值是一个函数,而且很明显。但是addVersionTwo函数实际上是返回函数的函数调用的结果。因此,addVersionTwo实际上是下面的函数:
return function() {
counter += 1;
return counter;
}
您可以按如下方式定义函数addVersionTwo:
var counter = 0;
var addVersionTwo = function() {
counter += 1;
return counter;
};
执行此操作时:
addVersionOne()
结果如何?好,让我们看看这个函数返回什么:
//...
return function() {
counter += 1;
return counter;
}
它返回一个函数。该函数从未执行,只是返回。函数本身被设置为目标元素的innerHTML
但这又有什么回报呢
addVersionTwo()
请注意,第二个版本如何将所有内容包装在括号中,然后添加另一组括号以调用返回的函数。因此,虽然变量addVersionOne
是返回函数的函数,但变量addVersionTwo
是返回的函数。它返回一个值:
//...
return counter;
不是每次函数运行时计数器都被重置回0吗 你指的是哪个“功能”?你有几个。此函数在页面加载时执行一次:
function () {
let counter = 0;
return function() {
counter += 1;
return counter;
}
}
然后返回存储在addVersionTwo
变量中的函数。该职能是:
function() {
counter += 1;
return counter;
}
不,该函数不会在每次执行时将计数器重置为0,因为第二个函数执行外部函数,而第一个函数是外部函数……第二个函数是IIFE->“立即调用函数表达式”。搜索该术语并进行一些阅读当您使用
let
时,它将不会重新声明变量。请检查此答案以获得澄清@ZainAftab:这在本文中是不正确的。在这里使用let
和var
没有区别。