说一下闭包
我在网上搜过不少关于闭包的具体定义,给大家总结一下我的理解,先举三个简单的例子,都作用到了闭包,可以先看一下他们的区别:
// 例子1: var a; function b(){ var i = 0 a = function(){ alert(i); } };
// 例子2: function funA(){ var m = 10; return function(){ alert(m); } };
// 例子3: var lis = document.getElementsByTagName("li"); for(var i=0;i<lis.length;i++){ (function(i){ lis[i].onclick = function(){ console.log(i); }; })(i); }
为什么说的这么复杂?怎么理解呢?
- 闭包的初衷,不就在解决 “函数内的变量,在函数外无法访问”的问题嘛!
- 所以,只要你能通过各种手段,让我们可以“在外部函数的同级作用域中,访问到这个内部函数”,借此来实现“在外部函数的同级作用域下,可以访问到外部函数内的变量”的效果。那么,我们也就实现了一个闭包。