闭包的存在,可使我们间接的访问到函数局部变量。
闭包经典面试题:循环中使用闭包来解决 var
定义变量的问题:
for (var i = 1; i <= 5; i++) {
setTimeout(function timer () {
console.log(i);
}, i * 1000);
}
// 结果都打印 5 次 6
// 法一:使用闭包
for (var i = 1; i <= 5; i++) {
;function(j) {
setTimeout(function timer () {
console.log(j);
}, j * 1000);
}(i);
}
// 法二:setTimeout 第三个参数
for (var i = 1; i <= 5; i++) {
setTimeout(function timer (j) {
console.log(j);
}, i * 1000, i);
}
// 法三:let
for (let i = 1; i <= 5; i++) {
setTimeout(function timer () {
console.log(i);
}, i * 1000);
}
/*
编写函数 trigger ,实现调用函数,交替打印 1,2
*/
function trigger() {
let flag = true
return ()=> {
flag = !flag
retur flag ? 1 : 0
}
}
const result = trigger()
result() // 1
result() // 0
result() // 1