gpt4 book ai didi

javascript - 为什么一个计数器工作而另一个不工作? (关闭?)

转载 作者:行者123 更新时间:2023-12-03 00:39:53 24 4
gpt4 key购买 nike

关于这个反例,我有两个问题。

  1. 为什么 addVersionOne 不起作用?为什么它返回实际代码而不是数字?
  2. addVersionTwo 如何工作?每次运行该函数时,counter 不是都会重置回 0 吗?

const addVersionOne = function() {
let counter = 0;
return function() {
counter += 1;
return counter;
}
}

var addVersionTwo = (function () {
let counter = 0;
return function() {
counter += 1;
return counter;
}
})();

function writeVersionOne(){
document.getElementById("addVersionOne").innerHTML = addVersionOne();
}

function writeVersionTwo(){
document.getElementById("addVersionTwo").innerHTML = addVersionTwo();
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<button type="button" onclick="writeVersionOne()">addVersionOne</button>
<button type="button" onclick="writeVersionTwo()">addVersionTwo</button>
<p id="addVersionOne">0</p>
<p id="addVersionTwo">0</p>
<script src="main.js"></script>
</head>
<body>

</body>
</html>

最佳答案

当您执行此操作时:

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;
}

不,该函数不会在每次执行时将 counter 重置为 0

关于javascript - 为什么一个计数器工作而另一个不工作? (关闭?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53505367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com