Javascript高级—闭包问题
闭包问题
循环中赋值为引用的问题
for (var i = 1; i < 5; i++) {
setTimeout(function timer() {
console.log(i)
}, i * 1000)
}
解决方法有3种
第一种,使用立即执行函数
方式
for (var i = 1; i < 5; i++) {
(fuction(j){
setTimeout(function timer() {
console.log(j)
}, j * 1000)
})(i)
}
第二种,使用ES6的let
for (let i = 1; i < 5; i++) {
setTimeout(function timer() {
console.log(i)
}, i * 1000)
}
第三种,使用setTimeout的第三个参数
for (var i = 1; i < 5; i++) {
setTimeout(function timer(j) {
console.log(j)
}, i * 1000, i)
}
计数器
实现一个foo函数 可以这么使用:
a = foo();b = foo();c = foo();
// a === 1;b === 2;c === 3;
foo.clear();d = foo(); //d === 1;
function myIndex() {
var index = 1;
function foo(){
return index++;
}
foo.clear = function() {
index = 1;
}
return foo;
}
var foo = myIndex();