函数式编程,闭包,作用域,全局变量
2017-07-02 21:07 Dirichlet 阅读(552) 评论(0) 编辑 收藏 举报 function generateClosure(){
var count = 0;
var get = function(){
return ++count;
}
return get;
}
var counter = generateClosure();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
一个函数返回它内部定义的一个函数,就产生了一个闭包,闭包不仅包括被返回的函数 ,还包括这个函数的定义环境。上面例子中,generateClosure内部的函数get被外部的变量counter引用时,counter和generateClosure的局部变量就构成了一个闭包。
function generateClosure(){
var count = 0;
var get = function(){
return ++count;
}
return get;
}
var counter1 = generateClosure();
var counter2 = generateClosure();
console.log(counter1()); // 1
console.log(counter2()); // 1
console.log(counter1()); // 2
console.log(counter1()); // 3
console.log(counter2()); // 2
上面例子generateClosure调用了两次,产生了两个独立的闭包实例,二者的定义环境不一样。可以这样理解,generateClosure返回get的时候,也将get能引用到的generateClosure的局部变量也返回了,并在内存中生成了一个副本。上面的例子即使把var换成let,值类型count换成对象count{value:0}必不会影响结果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架