Мы часто пишем обратные вызовы через анонимные функции.
Проще говоря, анонимный означает функцию без имени, обычно выполняется немедленно. Но как он работает с именованными функциями (функции с именами)?
Мы можем сравнить это. Мы можем найти компьютер, который может выполнять команды оболочки, чтобы использовать большое количество вызовов функций, чтобы увидеть, как время выполнения используется двумя:
anonymous.js
Кода -копия выглядит следующим образом:
var count = 10000000
, sum = 0
while (count-) (function () {sum ++}) ()
Выполнить это
Кода -копия выглядит следующим образом:
$ time node anonymous.js
Реал 0m1.456s
Пользователь 0m0.015s
Sys 0M0.031S
Давайте посмотрим на именованные функции
названный.js
Кода -копия выглядит следующим образом:
var count = 10000000
, sum = 0
var cb = function () {
sum ++
}
В то время как (счет-) cb ()
Выполнить это
Кода -копия выглядит следующим образом:
$ времени узел по имени.js
Реал 0m0.575s
Пользователь 0M0.000S
Sys 0m0.046s
Названные функции будут намного быстрее, почему это происходит? На самом деле, это не сложно объяснить. Анонимные функции должны каждый раз переосмыслить обратный вызов, но именованные функции должны интерпретироваться только один раз, поэтому производительность будет улучшена. Тем не менее, тест обнаружил, что это улучшение очень, очень мало, и нет необходимости писать очень удобный обратный вызов в другую переменную отдельно.
Есть два способа писать с названием функций:
Функциональные выражения
Кода -копия выглядит следующим образом:
var func = function () {
console.log ('a')
}
Функциональное объявление
Кода -копия выглядит следующим образом:
функция func () {
console.log ('b')
}
На самом деле, если эти два используются вместе, могут быть проблемы, такие как
Кода -копия выглядит следующим образом:
var func = function () {
console.log ('a')
}
функция func () {
console.log ('b')
}
// Вывод:
Следовательно, в настоящее время в основном используется форма экспрессии функций, но как производится объявления функции?
nated2.js
Кода -копия выглядит следующим образом:
var count = 10000000
, sum = 0
функция cb () {
sum ++
}
В то время как (счет-) cb ()
Выполнить его и сравнить два
Кода -копия выглядит следующим образом:
$ времени узел по имени.js
Реал 0m0.553s
Пользователь 0M0.000S
Sys 0M0.015S
$ времени узел по имени2.js
Реал 0M0.529S
Пользователь 0M0.000S
Sys 0M0.047S
Кажется, что объявление функции будет немного быстрее, но оно очень, очень незначительно. Я лично рекомендую метод написания декларации функции.
PS: эти данные тестируются с использованием GIT-базы под Windows 7.