另一种调用方式
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
function f1(){
var n=999;
nAdd=function(){
n++;
};
function f2(){
alert(n);
}
return f2;
}
f1()();
nAdd();
f1()();
</script>
</body>
</html>老师,为什么这个代码两次弹出都是999,这种调用方式究竟是怎么执行的啊
3
收起
正在回答
2回答
你好同学,就是顺序执行的。弹出两次999是因为函数在执行完毕后就会自动销毁,那么它里面的变量n也就销毁。当再次调用函数的时候,又会重新定义变量n并初始化,所以弹出两次999。
而课程中讲解的闭包就是为了实现局部变量n也可以保存在内存中。闭包利用的就是把函数内部的子函数f2赋值给全局变量,参考如下:
全局变量在代码运行的过程中是不会销毁的,那么它用到的值,即函数f2就不会销毁。f2所在的作用域f1也就不会销毁,那么f1中的变量就能保存在内存中了。所以第一次定义的n为999就会保存在内存中,然后执行n+1为1000之后也可以保存在内存中哦。

祝学习愉快,望采纳。
组件化思想开发电商网页 18版
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星