-
Как вы понимаете, существует множество способов немедленного выполнения анонимных функций. Подводя итог, можно выделить три типичных способа (есть и другие способы, сообщите нам):
Способ первый
(функция() {
//…
})();
Способ 2
недействительная функция() {
//…
}();
Способ третий
~функция() {
//…
}();
Возможно, вы видели метод 1 и метод 2. Здесь мы в основном объясняем метод 3. Прежде чем объяснить третий метод, мы рассмотрим определение оператора «~» (отрицание битов) в EMCAScript (стр. 72 пятого издания), простой перевод:
Преобразуйте старое значение в 32-битное целое число, объединив операторы с операторами. Выполните оператор после оператора и преобразуйте строку. Результатом будет 32-битное целое число.
Как можно понять из вышесказанного, на самом деле побитовые операторы могут сразу возвращать значение следующего выражения. Фактически, этой цели могут достичь и другие побитовые операторы, например:
!функция() {
//…
}();
и т. д. может достичь нашей цели. Так что на самом деле нет другой причины использовать «~», просто код «выглядит хорошо» :^)
Эффективность — это не столько эффективность выполнения анонимных функций тремя способами, сколько лучше непосредственно анализировать эффективность выполнения каждого оператора. Итак, давайте сравним и посмотрим на определения «()» и «void» в спецификации EMCA.
Групповые операторы (пятое издание, стр. 66)
Возвращает результат выполнения выражения
пустота (стр. 70, 5-е издание)
Объединение операторов с операторами возвращает неопределенное значение.
Поскольку групповому оператору также необходимо выполнить оператор и вернуть значение, возвращаемое блоком операторов, по сравнению с void, для получения блока операторов потребуется несколько операций (хотя это не требует большого потребления производительности), поэтому в этом случае производительность void лучше, чем у группового оператора.
Сравнивая эти два метода, производительность третьего метода явно ниже, чем первых двух. Подводя итог, с грамматической точки зрения, среди трех вышеупомянутых методов анонимных функций второй метод лучше первого, а третий метод наименее эффективен.
Подведите итоги и подумайте о преимуществах между этими тремя
Метод 1 очень распространен и безопасен, поэтому никто не будет винить вас за использование этого метода. Однако учащиеся, использующие метод 1, часто могут столкнуться с «проблемой» в том, что забывают сопоставить скобки (особенно если блок операторов очень длинный). часто ошибаюсь)
Использование побитовых операторов для выполнения анонимных функций очень модно и используется для того, чтобы выглядеть круто. Многие IDE (например, IDEA) и инструменты подсветки синтаксиса не поддерживают третий способ записи.
void является наиболее эффективным, но он всегда кажется очень раздутым по сравнению с двумя другими реализациями (всего еще несколько символов?)
Так
Учитывая объем кода и эффективность, правильно использовать первый метод в крайних случаях, когда необходимо сохранить дополнительный код, и использовать третий метод, чтобы отдать приоритет эффективности. Затем я хотел бы объяснить использование второго метода здесь. На самом деле разница в эффективности между тремя методами очень мала. Поэтому использовать этот метод исключительно на основе эффективности практически нецелесообразно.
Конкретный план, который следует принять, необходимо рассматривать с учетом фактической ситуации. Например, я часто использую третий метод, потому что 1. Он удобен (просто добавьте один символ) 2. Сопоставление скобок, когда функция длинная, закружит голову 3. Прикольно использовать, но метод 3 часто заставляет меня присматриваться к нему Члены команды кода обеспокоены.
Если у вас есть базовый код на основе платформы, такой как некоторые библиотеки классов, использование метода 1 является самым безопасным и простым для понимания всеми, поэтому это самый безопасный выбор.
[Исходный текст: http://www.gracecode.com/archives/3004/ Очень хорошо, каждый может на этом поучиться.