Почему бы не написать анонимное содержимое функции, а не анонимную функцию И содержимое анонимной функции?анонимная функция полезность
ответ
Я не знаю, применимо ли это, поскольку оно специфично для Javascript, и я не вижу тег Javascript, но ... нередко создавать + вызывать анонимную функцию сразу. Это часто делается для того, чтобы сохранить глобальный масштаб от переменного загрязнения.
var x = 1;
(function(){
var x = 2;
})();
x == 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).
Есть много областей, где они пригождаются, особенно в функциональном программировании (например, закрытие или каррирование).
Они существуют, потому что есть много раз, когда вы хотите иметь семантику метода с синтаксисом выражений.
var l = new List<int>() { 1, 2, 3, 4, 5 };
var a = l.Where(i => i > 3); // a = 4, 5
Я не хотел писать новый предикат метода, который проверял, было ли целое число больше трех. Мне нужен смысл метода, где я могу только выразить выражение. Анонимная функция позволяет мне обоим. Woot! :)
Если вы спрашиваете: «Зачем использовать выражение лямбда?», Тогда есть несколько ответов. Для одних лямбда-выражения, являющиеся сокращением, обычно легче читать и понимать, чем гораздо более подробные альтернативы полных анонимных функций (т. Е. С термином delegate()) или полномасштабной функцией и делегатом. Лямбда-выражения также идеальны для выполнения коротких, простых, «экспрессивных» вычислений (т. Е. Простой математики на множестве входных данных), что довольно часто происходит при программировании.
Лямбда-выражения - это мощный инструмент, который поможет улучшить выразительность, простоту и удобочитаемость вашего кода.
Они обычно используются для обратных вызовов. Вы не можете просто написать контент, потому что ваш код не выполняет его напрямую.
Если нет, то когда это выполняется? У него даже нет имени! –
Выполняется всякий раз, когда функция, которую вы передаете ей, принимает решение, как если бы вы передали ей именованную функцию. Что касается того, что у него нет имени, ну и что? Если вы malloc памяти в C, у него нет имени, просто адрес. Анонимная функция такая же. Под капотом вы обычно создаете функцию где-то в стеке, и на самом деле просто передаете указатель на эту функцию. – patros