自调用匿名函数闭包内变量的生命周期
lifetime of a variable inside a self invoking anonymous function closures
我正在学习http://www.w3schools.com/js/js_function_closures.asp的函数闭包
我不明白下面的代码。变量add引用一个自调用的匿名函数,该函数返回一个匿名函数。在这种情况下,变量counter发生了什么?当我们调用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>
在第一个例子中,counter是一个全局变量,因为闭包中的计数器超出了作用域。在第二种情况下,semih不应该在函数中,因为innerHTML接受一个字符串。
相关文章:
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 通过javascript重定向html传递php变量
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 全局变量和全局对象的属性之间有什么区别吗
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 值对象在某个变量发生更改后发生更改
- JQuery 插件架构,用于定义对象和变量生命周期
- 拥有许多僵尸(X/Y变量、大小、生命值),而不单独手动创建每个僵尸
- 变量的生命周期
- JavaScript词法作用域和变量的生命周期
- java方法中的javascript变量生命周期
- 自调用匿名函数闭包内变量的生命周期
- JavaScript函数中变量的生命周期
- 将生命周期的公共成员赋值给变量与返回对象之间的区别是什么?
- javascript变量生命周期