let
не будет подниматься ко всей области блока, в которой они появляются. Напротив, var
может подниматься, как показано ниже. {
console.log(cc); // undefined. Caused by hoisting
var cc = 23;
}
{
console.log(bb); // ReferenceError: bb is not defined
let bb = 23;
}
Фактически, Per @Bergi, Подняты var
и let
. let
полезен для закрытия и сбора мусора для восстановления памяти. Рассмотрим, function process(data) {
//...
}
var hugeData = { .. };
process(hugeData);
var btn = document.getElementById("mybutton");
btn.addEventListener( "click", function click(evt){
//....
});
Обратный вызов обработчика click
вообще не нуждается в переменной hugeData
. Теоретически, после запуска process(..)
, огромная структура данных hugeData
может быть собрана в мусор. Тем не менее, возможно, что какой-то движок JS по-прежнему должен сохранить эту огромную структуру, поскольку функция click
имеет закрытие по всей области. Тем не менее, область блока может сделать эту огромную структуру данных собранной мусором. function process(data) {
//...
}
{ // anything declared inside this block can be garbage collected
let hugeData = { .. };
process(hugeData);
}
var btn = document.getElementById("mybutton");
btn.addEventListener( "click", function click(evt){
//....
});
let
петли let
в цикле могут повторно привязывать его к каждой итерации цикла, чтобы повторно назначить ему значение с конца предыдущей итерации цикла. Рассмотрим // print '5' 5 times
for (var i = 0; i < 5; ++i) {
setTimeout(function () {
console.log(i);
}, 1000);
}
, но заменим var
на let
// print 1, 2, 3, 4, 5. now
for (let i = 0; i < 5; ++i) {
setTimeout(function () {
console.log(i);
}, 1000);
}
Поскольку let
создают новую лексическую среду с этими именами для a) выражение инициализатора b) каждая итерация (предшествующая оценке выражения инкремента), больше подробности здесь . Означает ли это, что миндаль не поддерживает внешние скрипты?
blockquote>Да, это именно то, что это значит. Из раздела «Ограничения» , очень первый элемент:
оптимизирует все модули в один файл - без загрузки динамического кода.
blockquote>(Акцент добавлен.)
Просто прочитайте один из комментариев авторов almondjs на github - похоже, внешние скрипты не поддерживаются и не будут поддерживаться в ближайшем будущем.