Если вы не хотите менять синтаксис, вы можете использовать var
.
(function() {
for (var i = 0; i < 5; i++) {
console.log(i);
}
console.log(i);
// this should work.
})()
В противном случае переменная, объявленная с помощью let
или const
, имеет то, что называется Block Scope , означающее, что она видна только внутри фигурных скобок, в которых она была определена. По сути, это принципиальная разница между let
и var
. Переменная, объявленная с помощью var
, имеет Область действия функции (Это видно по всей функции, даже до ее лексического определения, ее значение будет просто undefined
)
(function() {
console.log(i); // undefined
var i = 10;
console.log(i); // 10
})();
Но приведенный выше пример будет работать, только если нигде нет "use strict"
.