Функции лямбды JavaScript

Я искал хороший пример использования лямбда-функций или анонимных функций в JavaScript без везения.

Есть ли у jQuery встроенные функции для реализации лямбда?

Ответы

Ответ 1

В JavaScript эти выражения называются выражением функций (используя function как оператор, а не объявления , используя function в качестве оператора) и может быть назван или анонимным.

Это так же просто, как делать что-то, что говорит компилятору, что это выражение (например, var x =), а затем записывать функцию обычно и добавлять разделитель ; в конец.

function invoke(lam) {
    console.log(
        lam()
    );
}

var lambda = function () {return 'foo';};

invoke(lambda); // "foo" logged

Как и любая функция в JavaScript, область наследуется от того, где она определена, а не там, где она вызывается.

Самозапускающиеся и анонимные функции почти всегда являются выражением функции. Для самозапускаемых функций ( before function означает, что код интерпретируется как выражение, тогда (предпочтительный) ()); или (альтернативный) )(); вызывает его немедленно.

Возможно, вам нужно будет помнить, что выражение функции не поддерживается. Если вам нужно грузоподъемное для того, чтобы избежать ссылок ошибки, в сочетании с var. Сама функция все равно будет недоступна до тех пор, пока код не перейдет к строке, где она определена.

Для имени функции функции имя доступно только внутри, а не снаружи (некоторые старые версии IE просочились в название). Чтобы описать это, я буду использовать два примера: один самозапускающийся и один var d;

// self-invoked
(function foo() {
    console.log('inside:', foo); // foo is defined here
}());
console.log('outside:', foo); // ReferenceError: foo is not defined

// var
var bar = function foobar() {
    console.log('inside:', foobar); // foobar is defined here
    console.log('inside:', bar); // bar is defined here too (=== foobar)
};
bar(); // invoke
console.log('outside:', bar); // bar is also defined here, but..
console.log('outside:', foobar); // ReferenceError: foobar is not defined

Ответ 2

Лямбда-функция (анонимная функция) на самом деле является просто объявлением функции без имени (ее можно присвоить переменной позже и по-прежнему технически быть лямбдой). Одним из распространенных примеров является функция самоисполнения:

(function(){
  /*
    do stuff
  */
})();

Другим распространенным примером является передача функции в качестве параметра для обратного вызова AJAX или JSONP, тайм-аута или sort():

setTimeout(
    function() {
        console.log('lambda!');
    },
    100
);

На "принимающем" конце лямбда вы вызываете параметр функции, как и любую другую функцию:

functionThatUsesLamba(function(s) { console.log(s); });

function functionThatUsesLambda(logFn) {
  if (typeof(logFn) == 'function') {
    logFn('lambda');
  } else {
    throw "logFn must be a function!!!";
  }
}