闭包 有什么用
让我用最土的话来给你解释解释什么是闭包?它有什么用?
我在网上搜过不少关于闭包的具体定义,给大家总结一下我的理解,举三个简单的例子,都作用到了闭包,可以先看一下他们的区别
var a
function b(){
___var i = 0
___a = function(){
______alert(i)
___}
};
_________________________
function funA(){
___var m = 10;
___return function(){
______alert(m)
___}
};
_________________________
var lis = document.getElementsByTagName("li");
for(var i=0;i<lis.length;i++){
___(function(i){
______lis[i].onclick = function(){
_________console.log(i);
______};
___})(i);
}
视觉上闭包其实就是一个函数内部的函数,对,闭包其实就是个函数。其次,想成为闭包,可不是什么函数都可以的,网上很多帖子说内部函数要引用外部函数的变量,这句话说的太模糊了。
仅仅是在内部函数中引入外部函数里的变量,这个内部函数你不返回,那么你在外部函数的同级作用域下还是访问不到外部函数内的变量
那么这就是形成闭包的第一种方式:内部函数引用了外部函数中的变量,然后再把这个内部函数返回
第二种方法,就是把这个内部函数保存在一个全局的变量中,我们就可以直接在全局通过这个变量名来调用这个内部函数,此时我们就不需要return内部函数了
总而言之,你只要能把这个“引用了外部函数内的变量”的内部函数给暴露出去,那它就叫做闭包
为什么这么复杂?闭包的初衷不就在解决函数内的变量,在函数外无法访问的问题