一个函数fun的作用域访问了另外一个函数fn 里面的局部变量
function fn() {
var num = 10;
return function() {
console.log(num);
}
}
var f = fn();
f();
// 类似于
// var f = function() {
// console.log(num);
// }
利用闭包的方式获取异步任务,异步任务如定时器函数,点击事件,回调函数只有触发的时候才会执行
数据泄露:延长变量的使用时间
for (var i = 0; i < lis.length; i++) {
lis[i].index = i;
lis[i].onclick = function() {
// console.log(i); 不加索引此时这个i的值为4
console.log(this.index);
}
}
// 2. 利用闭包的方式得到当前小li 的索引号
for (var i = 0; i < lis.length; i++) {
// 利用for循环创建了4个立即执行函数
// 立即执行函数也成为小闭包因为立即执行函数里面的任何一个函数都可以使用它的i这变量
(function(i) {
// console.log(i);
lis[i].onclick = function() {
console.log(i);
}
})(i);