Следующий фрагмент кода печатает «K» 16 раз.Понимать область JavaScript в пределах цикла
var rest = "KLMNOPQRSTUVWXYZ".split(""), fns = {};
for (var i=0; i<rest.length; i++) {
(function(i){
fns[rest[i]] = function() {
console.log(rest[i]);
};
fns.K();
})(i);
}
Этот фрагмент кода выводит все алфавиты "К", "L" ....... "Y", "Z"
var rest = "KLMNOPQRSTUVWXYZ".split(""), fns = {};
for (var i=0; i<rest.length; i++) {
fns[rest[i]] = function() {
console.log(rest[i]);
};
fns.K();
}
Я новичок в JavaScript, и не совсем понимают, как использование IIFE во втором примере приводит к разному поведению. Может кто-то прояснить?
Когда функция определена, rest [i] фактически не оценивается. Он оценивается во время выполнения функции. И затем он извлекает i из области частной функции, если таковой есть? Я прав? – user2383728
@ user2383728 Да. В первом случае «i» встречается сначала в области IIFE. Второй случай, это цикл 'i'. – Joseph