Показать сообщение отдельно
  #13 (permalink)  
Старый 26.04.2015, 07:27
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Перед компилированием кода любой нормальный интерпретатор прогоняет его через оптимизатор. Грубя говоря, вот так:
//до оптимизации
function testForPositiveness(numbers) {
    let isPositive = (number) => number > 0;
    let results = [];
    
    for (let number of numbers) {
        results.push(isPositive(number));
    }
    
    return results;
}

//после оптимизации
function testForPositiveness(numbers) {
    let results = [];
    
    for (let number of numbers) {
        results.push(number > 0);
    }
    
    return results;
}


Здесь оптимизатор видит, что функция isPositive может быть использована только в testForPositiveness и что можно с чистой совестью заинлайнить её. Если бы isPositive была где-нибудь в глобальном скопе, ничего не вышло бы (неизвестно, кто еще может её вызывать). Если бы где-то внутри testForPositiveness стоял эвал, ничего не вышло бы (по той же причине; заодно похерилась бы куча остальных возможных оптимизаций).
Ответить с цитированием