尝试使用闭包和let来打印for循环中的一系列数字:
请考虑以下示例:
for(var i=1; i<10; i++){
setTimeout(function(){
document.write(i);
}, 1000);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
101010101010101010
关闭:
for(var i=1; i<10; i++){
(function(x){
setTimeout(function(){
document.write(x);
}, 1000);
})(i);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
123456789
没有关闭,只需使用ES6让:
for(let i=1; i<10; i++){
setTimeout(function(){
document.write(i);
}, 1000);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
123456789
试图了解我们是否还需要使用IIFE块来关闭ES6?
如果我们真的需要使用ES6闭包,那还有什么好的例子吗?
以下是Kleo Petrov的一个很好的解释 -
IIFE是ES5中使用最多的模式之一,因为函数是声明范围代码块的唯一方法.在ES6中,我们可以使用模块而不是使用IIFE:
// myModule.js
let counter = 0;
export function increment() {
counter++;
}
// logic.js
import {increment} from 'myModule.js';
increment();
Run Code Online (Sandbox Code Playgroud)
您可能希望在ES6中使用IIFE的唯一情况是使用立即调用的箭头函数,这需要多个表达式,例如:
const SENTENCE = 'Hello world, how are you?';
const REVERSE = (() => {
const array = [...SENTENCE];
array.reverse();
return arr.join('');
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6659 次 |
| 最近记录: |