Яка перевага призначення функції вару?


Відповіді:


8

Я вважаю, що коротка відповідь полягає в тому, що ви створюєте анонімну функцію, призначену змінній, на відміну від створення іменованої функції за допомогою ...

    function sum() {}

Хороший спосіб перевірити відмінності - зателефонувати на них .ToString () і побачити різницю, або ви могли б зробити console.log (sum.name). Один дасть фактичне ім’я, а інший нічого, а саме анонімну функцію (ту, що призначена var). Існують і конкретні особливості, як, наприклад, var sum = function () {} визначається під час виконання, а функція sum () {} визначається під час розбору.


Що я маю на увазі під останнім реченням, це те, що якщо ви намагалися викликати sum () у попередньому рядку вище, де це було визначено var, то сталася б помилка. Якщо це визначено як у моїй відповіді, тоді помилки не буде, навіть якщо виклик був вище функції.
гармоніка

12
Це пояснює різницю , але я не думаю, що це пояснює перевагу .
Кіт Томпсон

Яка різниця між часом розбору та часом виконання?
Wern Ancheta

1
Не має нічого спільного з названими функціями, ви все одно можете призначити названу функцію змінній
Juan Mendes

5

Одна перевага полягає в тому, що ви не можете використовувати оголошення блоку в блоці. Вони можуть бути лише на верхньому рівні файлу або безпосередньо в межах іншої функції.

if (true) {
  function foo() {}
}
try {
  function foo(){}
}
switch (true) {
  default:
    function foo(){}
}

Усі вони не визначені стандартом, і браузери роблять різні речі, див. Https://stackoverflow.com/questions/10069204/function-declarations-inside-if-else-statements . Тож якщо вам доводиться іноді використовувати інший стиль, для послідовності ви можете це робити завжди

Крім того, я не впевнений у цьому, але якщо я правильно пам’ятаю, деякі старі міні-пристрої були недостатньо розумні, щоб обробляти декларації функцій і не перейменовувати їх.


3

Я не експерт Javascript, тому прийміть це із зерном солі. Я думаю, що в деяких випадках люди можуть зробити це для стилю, і те саме можна досягти, просто написавши "функцію суму () {...}"

Однак присвоєння функції змінній - це дуже потужна техніка функціонального програмування. Якщо ви знайомі з ООП, він дещо схожий на поліморфізм. Придумайте класичний приклад базового класу Animal та класів походження котів / собак. Ви можете написати код, який працює з Animal, але коли він викликає функцію, ця функція може виконувати різні роботи залежно від типу примірника.

У функціональному програмуванні у вас може бути алгоритм, який працює з "функцією", але якщо ви використовуєте змінну для виклику цієї функції, у вас є гнучкість призначення іншої функції під час виконання.

Наприклад, скажімо, що ви пишете алгоритм, щоб представити 10000 точок даних у вікні, що становить всього 500 пікселів. Кожен піксель буде представляти 20 точок даних, і для їх подання вам потрібно об'єднати ці 20 точок даних в одне значення.

Отже, скажімо, ви визначаєте алгоритм для представлення 10000 точок, і цей алгоритм використовує змінну функції, яку називають сукупною, наприклад:

...
displayValue = aggregate( numbersInOnePixel );
...

Тепер під час виконання користувач може вибрати спосіб агрегації даних. Вашою фактичною змінною функції може бути будь-яка з наведених нижче:

aggregate = function sum() {...}
aggregate = function min() {...}
aggregate = function max() {...}
aggregate = function average() {...}

0

Це, головним чином, питання стилю, оскільки єдині ситуації, коли виявляється різниця (виклик деяких функцій перед тим, як закінчити всі декларації; використовуючи метод toString), є моїми кутовими справами, на мою думку.

Один із аргументів, які я чув, підтримуючи цей var =стиль, - це те, що він відповідає тому, як ви оголошуєте нормальні змінні. Це обмежує кількість мовних функцій, якими ви користуєтесь, і спрощує введення вашої програми комусь новому в JavaScript.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.