Я искал хороший пример использования лямбда-функций или анонимных функций в JavaScript без везения.
Есть ли у jQuery встроенные функции для реализации лямбда?
Я искал хороший пример использования лямбда-функций или анонимных функций в JavaScript без везения.
Есть ли у jQuery встроенные функции для реализации лямбда?
В 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
Лямбда-функция (анонимная функция) на самом деле является просто объявлением функции без имени (ее можно присвоить переменной позже и по-прежнему технически быть лямбдой). Одним из распространенных примеров является функция самоисполнения:
(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!!!";
}
}