我一直在寻找一个在 JavaScript 中使用 lambda 函数或匿名函数的好例子,但没有成功。
jQuery 是否也有实现 lambda 的内置函数?
我一直在寻找一个在 JavaScript 中使用 lambda 函数或匿名函数的好例子,但没有成功。
jQuery 是否也有实现 lambda 的内置函数?
在JavaScript中,这些被称为函数表达式(function
用作运算符而不是声明,function
用作语句),可以命名或匿名。
这真的很简单,就像做一些事情告诉编译器它是一个表达式(例如var x =
)然后正常编写一个函数,并;
在最后添加一个分隔符。
function invoke(lam) {
console.log(
lam()
);
}
var lambda = function () {return 'foo';};
invoke(lambda); // "foo" logged
与JavaScript中的任何函数一样,作用域是从定义它的地方继承的,而不是从它被调用的地方继承的。
自调用和匿名函数几乎总是函数表达式。对于自调用函数,(
beforefunction
意味着代码被解释为表达式,然后 (preferred)());
或 (alternate))();
立即调用它。
您可能需要记住,函数表达式本身不会被提升。如果您需要提升它以避免引用错误,请结合var
. 在代码通过定义它的行之前,函数本身仍然不能完全可用。
对于命名函数表达式,该名称仅在函数内部可用,而在外部不可用(尽管某些旧版本的 IE 泄露了该名称)。为了描述这一点,我将使用两个示例,一个 self invoking 和一个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
lambda 函数(匿名函数)实际上只是一个没有名称的函数声明(它可以稍后分配给一个变量,并且在技术上仍然是一个 lambda)。一个常见的例子是自执行函数:
(function(){
/*
do stuff
*/
})();
另一个常见示例是将函数作为参数传递给 AJAX 或 JSONP 回调、超时或sort()
:
setTimeout(
function() {
console.log('lambda!');
},
100
);
在 lambda 的“接收”端,您可以像调用任何其他函数一样调用函数参数:
functionThatUsesLamba(function(s) { console.log(s); });
function functionThatUsesLambda(logFn) {
if (typeof(logFn) == 'function') {
logFn('lambda');
} else {
throw "logFn must be a function!!!";
}
}