闭包的定义闭包
闭包就是可以读取其余函数内部变量的函数函数
何时使用闭包this
闭包能够用在许多地方。它的最大用处有两个,一个是前面提到的能够读取函数内部的变量,另外一个就是让这些变量的值始终保持在内存中。spa
先看看通常的调用方法:code
1 var flag = "window"; 2 var object = { 3 flag : "local", 4 sayFlag: function(){ 5 alert(this.flag); 6 } 7 } 8 object.sayFlag();//local
而后改用闭包:对象
1 var flag = "window"; 2 var object = { 3 flag : "local", 4 sayFlag: function(){ 5 //返回一个匿名函数 6 return function(){ 7 alert(this.flag); 8 } 9 } 10 } 11 object.sayFlag()();//window
这里给你们普及一下this的相关问题blog
那么如何访问“local呢”?内存
1 var flag = "window"; 2 var object = { 3 flag : "local", 4 sayFlag: function(){ 5 var that = this; //此处的this是object的引用 6 //返回一个匿名函数 7 return function(){ 8 alert(that.flag); 9 } 10 } 11 } 12 object.sayFlag()();//local
闭包变量常驻内存io
1 var say = function(){ 2 var i = 1; 3 var sayName = function(){ 4 i++; 5 alert(i); 6 } 7 return sayName; 8 } 9 var result1 = say(); 10 result1(); //1 11 result1(); //2
因为闭包访问外部函数的i,外部函数返回引用闭包函数,因此内存不会被回收,i值也常驻内存,因此每次执行say函数时,i并不会从新复制function