function 王老吉(){
var 剩余=100;
return function(){
剩余--;
console.log(剩余内含饮料);
}
}
var 喝王老吉=王老吉();
喝王老吉();//剩下99
//干别的事情
喝王老吉()//剩下98
不知道这样的例子能不能很清楚的描述成一个闭包的作用:
1、避免每次喝王老吉时,饮料都是100开始计数(用外面的术语 讲就是避免函数执行完成后被释放。)
2、如果不使用这样的写法,就得把计数器暴露在外面
代码如下
var 剩余=100
function 喝王老吉(){
剩余--;
}
喝王老吉();//剩下99
//干别的事情
喝王老吉()//剩下98
这很不合理,因为“剩余”这个变量是属于王老吉本身的。
在早期的面向结构编程中,数据和处理逻辑是分开的。后来人们发现这样有很多问题,就把关联的数据和处理逻辑绑定起来。如果以数据(名词)为主体,封装处理逻辑(动词),就是面向对象编程里的对象。如果以处理逻辑(动词)为主体,封装数据(名词),就是函数式编程里的闭包。

通过一个饮用王老吉的例子,本文详细解释了JavaScript中闭包的概念及其作用,包括如何利用闭包保留函数内部状态,实现数据的封装。
120

被折叠的 条评论
为什么被折叠?



