2009-07-11 4 views

ответ

0

Я не знаю, применимо ли это, поскольку оно специфично для Javascript, и я не вижу тег Javascript, но ... нередко создавать + вызывать анонимную функцию сразу. Это часто делается для того, чтобы сохранить глобальный масштаб от переменного загрязнения.

var x = 1; 
(function(){   
    var x = 2; 
})(); 
x == 1; 
0

Это так, что вам не нужно создавать функциональную оболочку, которая по сути бесполезна.

7

Поскольку вы не пишете анонимную функцию, немедленно вызовите ее. Обычно он передается какой-то другой функции, которая делает с ней что-либо (например, использует анонимную функцию для сопоставления массива с другим массивом).

1

Возможно, самое большое использование для одноразовых функций, которые не будут использоваться нигде или должны быть созданы по требованию динамически. Таким образом, им не нужно «загрязнять» пространство имен.

Например, в Python:

x_values = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
y_values = map(lambda x: x**x + 2x + 3, x_values) 

С помощью лямбда, мне не нужно, чтобы создать функцию в пространстве имен модуля только для одного полинома (х^2 + 2x + 3).

Есть много областей, где они пригождаются, особенно в функциональном программировании (например, закрытие или каррирование).

0

Они существуют, потому что есть много раз, когда вы хотите иметь семантику метода с синтаксисом выражений.

var l = new List<int>() { 1, 2, 3, 4, 5 }; 
var a = l.Where(i => i > 3); // a = 4, 5 

Я не хотел писать новый предикат метода, который проверял, было ли целое число больше трех. Мне нужен смысл метода, где я могу только выразить выражение. Анонимная функция позволяет мне обоим. Woot! :)

0

Если вы спрашиваете: «Зачем использовать выражение лямбда?», Тогда есть несколько ответов. Для одних лямбда-выражения, являющиеся сокращением, обычно легче читать и понимать, чем гораздо более подробные альтернативы полных анонимных функций (т. Е. С термином delegate()) или полномасштабной функцией и делегатом. Лямбда-выражения также идеальны для выполнения коротких, простых, «экспрессивных» вычислений (т. Е. Простой математики на множестве входных данных), что довольно часто происходит при программировании.

Лямбда-выражения - это мощный инструмент, который поможет улучшить выразительность, простоту и удобочитаемость вашего кода.

2

Они обычно используются для обратных вызовов. Вы не можете просто написать контент, потому что ваш код не выполняет его напрямую.

+0

Если нет, то когда это выполняется? У него даже нет имени! –

+0

Выполняется всякий раз, когда функция, которую вы передаете ей, принимает решение, как если бы вы передали ей именованную функцию. Что касается того, что у него нет имени, ну и что? Если вы malloc памяти в C, у него нет имени, просто адрес. Анонимная функция такая же. Под капотом вы обычно создаете функцию где-то в стеке, и на самом деле просто передаете указатель на эту функцию. – patros