[学习笔记]JS中闭包的理解

时间:2021-11-23 14:39:46

一、闭包概念的理解

闭包,又称为词法闭包或函数闭包指引用了*变量的函数。这个被引用的*变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。

*变量:该变量既不是函数本身定义的也不是函数参数中的变量。

 function f1() {
   var count = 99;
   function f2() {
     alert(count);//count对于f2来说是*变量,这里函数f2引用了*变量count
   }
   return f2;
 }

这个被引用的*变量将和这个函数一同存在,即使已经离开了创建它的环境也不例外。

 function f1(free) {
   return function(arg) {
     return free + arg;
   }
 }
 var freeAdd = f1(10);//*变量(值10)和函数一同存在
 var freeAdd2 = f1(20);//*变量(值20)和函数一同存在
 alert(freeAdd(5));//10+5
 alert(freeAdd2(5));//20+5

调用的函数会沿着作用域链一级一级向上寻找*变量,绑定的函数可以改变*变量,*变量不会消失,直到对它的引用消失。

二、闭包的应用

由于闭包的特性,能够保持*变量,因此可以使用闭包来存储动态数据,并且隐藏封装起来。