Comment implémenter le code suivant à l'aide d'es6 let,
for(var i = 0; i < 3;i++) {
(function(j){
$.ajax({
url: 'xxx',
success: function(){
console.log(j);
}
})(i);
})
}
for(let i = 0; i < 3;i++) {
$.ajax({
url: 'xxx',
success: function(){
console.log(i);
};
});
}
Ce que la personne qui pose la question veut demander concerne ES6
中怎么解決
i不是當(dāng)前的
i`, n'est-ce pas??
à ES5
中是使用閉包來解決的,在ES6
中可以用let
for(let i = 0; i < 3;i++) {
$.ajax({
url: 'xxx',
success: function(){
console.log(i);
}
});
}
C'est pareil avec ES6, les fermetures restent des fermetures.
Mettre var
換成 let
for(let i = 0; i < 3;i++) {
$.ajax({
url: 'xxx',
success: function(){
console.log(j);
}
})
}
Le test est le suivant (utilisez setTimeout pour simuler des requêtes asynchrones) :
for(var i = 0; i < 3;i++) {
setTimeout(function(){
console.log(i)
}, 123)
}
Imprimer 3 3
ES5 est résolu avec fermeture
for(var i = 0; i < 3;i++) {
(function(i) {
setTimeout(function(){
console.log(i)
}, 123)
})(i)
}
es6 est facile avec let
for(let i = 0; i < 3;i++) {
setTimeout(function(){
console.log(i)
}, 123)
}
let
Vous permet de déclarer une variable, une instruction ou une expression dont la portée est limitée au niveau du bloc
J'ai aussi trouvé la réponse, ES6 peut supprimer directement les fermetures
for(let i = 0; i < 3;i++) {
$.ajax({
url: 'xxx',
success: function(){
console.log(i);
}
});
}
Le résultat est le même qu'en utilisant la fermeture, merci à tous
Ce n'est absolument pas nécessaire dans ES6, laissez faire
http://www.softwhy.com/articl...