Итак, пытаясь немного узнать о ES6, я наткнулся на эту ссылку, https://es6-features.org/#BlockScopedVariables
// ES6
let callbacks = []
for (let i = 0; i <= 2; i++) {
callbacks[i] = function () { return i * 2 }
}
callbacks[0]() === 0
callbacks[1]() === 2
callbacks[2]() === 4
// ES5
var callbacks = [];
for (var i = 0; i <= 2; i++) {
(function (i) {
callbacks[i] = function() { return i * 2; };
})(i);
}
callbacks[0]() === 0;
callbacks[1]() === 2;
callbacks[2]() === 4;
Могу ли я узнать, почему в методе ES5 мы используем немедленную функцию для возврата значения i * 2?
Но в ES6 работает просто присвоение значения в цикле?
В принципе,
- Хотите знать, почему возникает эта разница?
- Как этот цикл выполняется?
- Я считаю, что разница связана с «блочной областью (let) и глобальной областью (var)», но хотите узнать больше о точке выполнения/времени выполнения?
- Значит, мы не хотим использовать немедленную функцию для сохранения текущего состояния переменной в ES6?
let
применяются те же правила, что и дляvar
, за исключением того, что вы не сможете получить доступ к объявленной переменнойlet
за пределами области ее блока. 01.07.2015