Что такое Closures / Lambda в PHP или Javascript в условиях неспециалиста?

Что такое Closures / Lambda в PHP или JavaScript в условиях непрофессионала? Пример был бы полезен для моего понимания. Я предполагаю, что Lambda и Closures – одно и то же?

Solutions Collecting From Web of "Что такое Closures / Lambda в PHP или Javascript в условиях неспециалиста?"

У 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() – замыкание.

JavaScript:

 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 соответственно при вызове.

Анонимные функции, также известные как замыкания, позволяют создавать функции, которые не имеют определенного имени. Они наиболее полезны в качестве значения параметров обратного вызова, но у них много других применений. Лямбда-функции позволяют быстро определять функции отбрасывания, которые не используются в других местах.