tec*_*kuz 3 javascript closures setinterval
我有一个功能:
setInterval(function () {
var counter = 0;
(function() {
counter = counter + 1;
console.log(counter);
})(counter)
}, 1000)Run Code Online (Sandbox Code Playgroud)
为什么不增加柜台?(相反,它记录1的).如何使它登录升序号码?(1,2,3 ......)
(function(closed_over_counter) {
setInterval(function() {
closed_over_counter++;
console.log(closed_over_counter);
}, 1000);
})(0);Run Code Online (Sandbox Code Playgroud)
由于您使用的是 IIFE 而不是可以多次调用的函数,因此这是毫无意义的。您也可以只在闭包内声明变量。
(function() {
var counter = 0;
setInterval(function() {
counter++;
console.log(counter);
}, 1000);
})();Run Code Online (Sandbox Code Playgroud)
或者,由于大多数人不再关心 Internet Explorer,因此可以放弃 IIFE 并使用块。
{
let counter = 0;
setInterval(function() {
counter++;
console.log(counter);
}, 1000);
}Run Code Online (Sandbox Code Playgroud)
您可以使用一个函数将函数作为闭包计数器返回.
setInterval(function(counter) {
return function() {
console.log(++counter);
};
}(0), 1000);Run Code Online (Sandbox Code Playgroud)