Что такое Closures / Lambda в PHP или JavaScript в условиях непрофессионала? Пример был бы полезен для моего понимания. Я предполагаю, что Lambda и Closures – одно и то же?
У SO уже есть ответы:
Что такое лямбда (функция)?
Как работают блокировки JavaScript?
Лямбда – анонимная функция. Закрытие – это функция, которая несет в себе свою область действия. Мои примеры здесь будут на Python, но они должны дать вам представление о соответствующих механизмах.
print map(lambda x: x + 3, (1, 2, 3)) def makeadd(num): def add(val): return val + num return add add3 = makeadd(3) print add3(2)
В вызове map()
отображается лямбда, а add3()
– замыкание.
js> function(x){ return x + 3 } // lambda function (x) { return x + 3; } js> makeadd = function(num) { return function(val){ return val + num } } function (num) { return function (val) {return val + num;}; } js> add3 = makeadd(3) // closure function (val) { return val + num; } js> add3(2) 5
Анонимные функции – это функции, объявленные без имени.
Например (используя jQuery):
$.each(array, function(i,v){ alert(v); });
Функция здесь анонимна, она создается именно для этого вызова $.each
.
Закрытие – это тип функции (ее можно использовать в анонимной функции или ее можно назвать), где переданные в нее параметры «захватываются» и остаются неизменными даже вне области видимости.
Закрытие (в JavaScript):
function alertNum(a){ return function(){ alert(a); } }
Закрытие возвращает анонимную функцию, но она не должна быть анонимной функцией.
Продолжая пример закрытия:
alertOne = alertNum(1); alertTwo = alertNum(2);
alertOne
и alertTwo
– это функции, которые будут alertTwo
предупреждения 1 и 2 соответственно при вызове.
Анонимные функции, также известные как замыкания, позволяют создавать функции, которые не имеют определенного имени. Они наиболее полезны в качестве значения параметров обратного вызова, но у них много других применений. Лямбда-функции позволяют быстро определять функции отбрасывания, которые не используются в других местах.