З огляду на цей приклад Javascript, який я знайшов
var sum = function() {
var i, sum = 0;
for(i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
}
return sum;
};
Яка перевага у призначенні функції вару?
З огляду на цей приклад Javascript, який я знайшов
var sum = function() {
var i, sum = 0;
for(i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
}
return sum;
};
Яка перевага у призначенні функції вару?
Відповіді:
Я вважаю, що коротка відповідь полягає в тому, що ви створюєте анонімну функцію, призначену змінній, на відміну від створення іменованої функції за допомогою ...
function sum() {}
Хороший спосіб перевірити відмінності - зателефонувати на них .ToString () і побачити різницю, або ви могли б зробити console.log (sum.name). Один дасть фактичне ім’я, а інший нічого, а саме анонімну функцію (ту, що призначена var). Існують і конкретні особливості, як, наприклад, var sum = function () {} визначається під час виконання, а функція sum () {} визначається під час розбору.
Одна перевага полягає в тому, що ви не можете використовувати оголошення блоку в блоці. Вони можуть бути лише на верхньому рівні файлу або безпосередньо в межах іншої функції.
if (true) {
function foo() {}
}
try {
function foo(){}
}
switch (true) {
default:
function foo(){}
}
Усі вони не визначені стандартом, і браузери роблять різні речі, див. Https://stackoverflow.com/questions/10069204/function-declarations-inside-if-else-statements . Тож якщо вам доводиться іноді використовувати інший стиль, для послідовності ви можете це робити завжди
Крім того, я не впевнений у цьому, але якщо я правильно пам’ятаю, деякі старі міні-пристрої були недостатньо розумні, щоб обробляти декларації функцій і не перейменовувати їх.
Я не експерт Javascript, тому прийміть це із зерном солі. Я думаю, що в деяких випадках люди можуть зробити це для стилю, і те саме можна досягти, просто написавши "функцію суму () {...}"
Однак присвоєння функції змінній - це дуже потужна техніка функціонального програмування. Якщо ви знайомі з ООП, він дещо схожий на поліморфізм. Придумайте класичний приклад базового класу Animal та класів походження котів / собак. Ви можете написати код, який працює з Animal, але коли він викликає функцію, ця функція може виконувати різні роботи залежно від типу примірника.
У функціональному програмуванні у вас може бути алгоритм, який працює з "функцією", але якщо ви використовуєте змінну для виклику цієї функції, у вас є гнучкість призначення іншої функції під час виконання.
Наприклад, скажімо, що ви пишете алгоритм, щоб представити 10000 точок даних у вікні, що становить всього 500 пікселів. Кожен піксель буде представляти 20 точок даних, і для їх подання вам потрібно об'єднати ці 20 точок даних в одне значення.
Отже, скажімо, ви визначаєте алгоритм для представлення 10000 точок, і цей алгоритм використовує змінну функції, яку називають сукупною, наприклад:
...
displayValue = aggregate( numbersInOnePixel );
...
Тепер під час виконання користувач може вибрати спосіб агрегації даних. Вашою фактичною змінною функції може бути будь-яка з наведених нижче:
aggregate = function sum() {...}
aggregate = function min() {...}
aggregate = function max() {...}
aggregate = function average() {...}
Це, головним чином, питання стилю, оскільки єдині ситуації, коли виявляється різниця (виклик деяких функцій перед тим, як закінчити всі декларації; використовуючи метод toString), є моїми кутовими справами, на мою думку.
Один із аргументів, які я чув, підтримуючи цей var =стиль, - це те, що він відповідає тому, як ви оголошуєте нормальні змінні. Це обмежує кількість мовних функцій, якими ви користуєтесь, і спрощує введення вашої програми комусь новому в JavaScript.