Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вопрос по функциям (https://javascript.ru/forum/events/55392-vopros-po-funkciyam.html)

Erolast 25.04.2015 21:08

Вообще, оптимизатор может понять, что функция вырожденная и просто заинлайнить ее. Главное - инкапсулировать и не юзать эвал.

tiundv 25.04.2015 22:44

Цитата:

Сообщение от Erolast (Сообщение 368262)
Вообще, оптимизатор может понять, что функция вырожденная и просто заинлайнить ее. Главное - инкапсулировать и не юзать эвал.

А теперь плиз по русски..Для чайника..

Erolast 26.04.2015 07:27

Перед компилированием кода любой нормальный интерпретатор прогоняет его через оптимизатор. Грубя говоря, вот так:
//до оптимизации
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 стоял эвал, ничего не вышло бы (по той же причине; заодно похерилась бы куча остальных возможных оптимизаций).


Часовой пояс GMT +3, время: 20:17.