闭包就是一个函数可以访问另外一个函数内部的变量。函数内部的变量很明显是一个局部变量。
在JS中,我们所定义的任意一个函数,都可以看作是闭包。只不过最明显的存在与嵌套关系的函数中,内部的子函数 可以 访问父函数 中的变量。
但是,我们想要从父函数的外部访问其内部的局部变量,该怎么实现?
通过观察,发现子函数可以访问父函数的局部变量,所以我们尝试着让这个内部的子函数作为桥梁连通内外,让外部有能力去访问一个函数内部的变量。
for(var i = 0; i < 10; i++){ //一个函数就是一个闭包 (function(j){ setTimeout(function () { console.log("i:",j); },1000); })(i); }
上面的代码 :内层定时器函数引用外层IIFE传的值形成闭包。
setTimout作外层函数,setTimeout的第一个回调函数作内层函数,内层引用外层的参数形成闭包。
例如:点击页面li中的内容,弹出 "您点击了第 N 条内容"
第一种方法:
利用this,对应索引的方法
for(var i = 0; i < lis.length; i++) { lis[i].index = i; lis[i].onclick = function() { console.log(this.index) alert(‘您点击了第‘ + Number(this.index + 1) + ‘条内容‘) } }
第二种方法:
利用闭包
for(var i = 0; i < lis.length; i++) { (function(j) { lis[j].onclick = function() { alert(‘您点击了第‘ + Number(j + 1) + ‘条内容‘) } })(i) }
原文:https://www.cnblogs.com/yess/p/14655388.html