Использование миндаля с встроенным requireJs [duplicate]

  • Переменная неподнимая 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) каждая итерация (предшествующая оценке выражения инкремента), больше подробности здесь .
1
задан mvovchak 17 June 2015 в 17:12
поделиться

2 ответа

Означает ли это, что миндаль не поддерживает внешние скрипты?

Да, это именно то, что это значит. Из раздела «Ограничения» , очень первый элемент:

оптимизирует все модули в один файл - без загрузки динамического кода.

(Акцент добавлен.)

3
ответ дан Louis 28 August 2018 в 11:06
поделиться

Просто прочитайте один из комментариев авторов almondjs на github - похоже, внешние скрипты не поддерживаются и не будут поддерживаться в ближайшем будущем.

Ссылка на github issue

0
ответ дан mvovchak 28 August 2018 в 11:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: