Функциональные литералы
В предыдущем разделе мы видели определение функции square(). С помощью этого синтаксиса обычно описывается большинство функций в JavaScript-программах. Однако стандарт ECMAScript v3 предоставляет синтаксис (реализованный в JavaScript 1.2 и более поздних версиях) для определения функциональных литералов. Функциональный литерал задается с помощью ключевого слова function, за которым следуют необязательное имя функции, список аргументов функции, заключенный в круглые скобки, и тело функции в фигурных скобках.
Другими словами, функциональный литерал выглядит так же, как определение функции, правда, у него может не быть имени. Самое большое различие состоит в том, что функциональные литералы могут входить в другие JavaScript-выражения. То есть функцию square() не обязательно задавать в виде определения:
function square(x) { return x*x; }
Ее можно задать с помощью функционального литерала:
var square = function(x) { return x*x; }
Функции, определенные таким образом, иногда называют лямбда-функциями. Это дань уважения языку программирования LISP, который одним из первых допускал вставку неименованных функций в виде литералов внутрь программы.
Хотя в данный момент польза от функциональных литералов может быть неочевидной, позднее, в сложных сценариях мы увидим, что они бывают довольно удобными и полезными.
Имеется еще один способ определения функции: можно передать список аргументов и тело функции в виде строк в конструктор Function(). Например:
var square = new Function("x", "return x*x;");
Такое определение функций используется редко. Обычно неудобно задавать тело функции в виде строки, и во многих реализациях JavaScript функции, определенные подобным образом, менее эффективны, чем функции, определенные любым из двух других способов.
Дата добавления: 2015-08-01; просмотров: 450;