闭包的存在,可使我们间接的访问到函数局部变量。
闭包经典面试题:循环中使用闭包来解决 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);}// 法三:letfor (let i = 1; i <= 5; i++) {setTimeout(function timer () {console.log(i);}, i * 1000);}
/*编写函数 trigger ,实现调用函数,交替打印 1,2*/function trigger() {let flag = truereturn ()=> {flag = !flagretur flag ? 1 : 0}}const result = trigger()result() // 1result() // 0result() // 1
