//闭包
function fun() {
var num = 10; //这里的局部变量被另一个函数fun1所访问 fun()是一个闭包
function fun1() {
console.log(num);
}
fun1();
}
fun();
//闭包 fun是一个闭包 也是一个高阶函数(返回一个函数)
function fun() {
var num = 10; //这里的局部变量被另一个函数fun1所访问 fun()是一个闭包
return function () {
console.log(num);
} //
}
var f = fun();
f();
闭包的作用:延伸了变量的作用范围
闭包的应用:
1.点击每个li时获得当前li的下标
1
2
3
4
//2. 利用闭包的方式得到当前li的下标
for (var i = 0; i < lis.length; i++) {
//创建四个立即执行函数
(function (i) { //这个立即执行函数是一个闭包
lis[i].onclick = function () {
console.log(i);
}
})(i)
}
2.利用闭包在 3秒之后打印所有li的内容
//利用闭包在 3秒之后打印所有li的内容
for (var i = 0; i < lis.length; i++) {
(function (i) {
setTimeout(function () {
console.log(lis[i].innerHTML);
}, 3000)
})(i)
}
3.打车计费
var car = (function () { //立即调用 是一个闭包
var start = 13;
var total = 0;
return { //返回两个方法
price: function (n) { //用到了闭包的变量
if (n <= 3) {
total = start;
} else {
total = start + (n - 3) \* 5;
}
return total;
},
yongdu: function (flag) {
return flag ? total + 10 : total;
}
}
})()
console.log(car.price(5)); //23
console.log(car.yongdu(true)); //33