javascript - 自调用匿名函数内变量的生命周期 - 函数闭包

标签 javascript function

我正在研究 http://www.w3schools.com/js/js_function_closures.asp 中的函数闭包

我不明白下面的代码。变量add指的是一个自调用的匿名函数,它返回一个匿名函数。在这种情况下,变量计数器会发生什么情况?当我们调用函数add时,会发生什么?

<!DOCTYPE html>
<html>
<body>

<p>Counting with a local variable.</p>

<button type="button" onclick="myFunction()">Count!</button>

<p id="demo">0</p>

<script>
var add = (function () {
    var counter = 0;    })();
    return function () {return counter += 1;}


function myFunction(){
    document.getElementById("demo").innerHTML = add();
}
</script>

</body>
</html>

另外我不明白为什么下面的代码不起作用?

<!DOCTYPE html>
<html>
<body>

<p>Counting with a local variable.</p>

<button type="button" onclick="myFunction()">Count!</button>

<p id="demo">0</p>

<script>
var add = (function () {
    var counter = 0;
    return function () 
           {
             var semih=0;
             if(counter >5) 
             {
                 return function(){ semih += 5;  }
             }
             return counter += 1;}
           }
)();

function myFunction(){
    document.getElementById("demo").innerHTML = add();
}
</script>

</body>
</html>

最佳答案

在第一个示例中,计数器是一个全局变量,因为闭包中的计数器超出了范围。在第二个中,semih 不应该位于函数内部,因为innerHTML 需要一个字符串。

关于javascript - 自调用匿名函数内变量的生命周期 - 函数闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32526076/

相关文章:

c++ - 如何从 C++ 中实例化对象的函数指针调用函数?

javascript - 设置可以选择的复选框的数量限制

javascript - 从 webapps 的 firebase 读取用户数据后,在 html 标签中显示用户数据

javascript - 在页面 ionic 2 中使用 app.component 函数

javascript - 如何使用按钮停止脚本运行?

php - 确定邮政编码邻近度/范围的 MySQL 函数

javascript - 仅在表格数据动画期间隐藏垂直滚动条

javascript - 无法使用jquery从本地存储获取数据的当前ID

c - 为什么这个 C 循环会跳过第一次输入字母的尝试?

python - 为什么这个 python 表达式参数在调用时没有扩展?