匿名函数
定义:无需定义标识符(函数名)的函数或子程序(子程序由一个或多个代码块组成,函数是一种子程序)。
//正常函数调用,先定义再调用
function foo(x) {
return x
}
foo(5); // 5
//匿名函数调用,使用时直接定义
(function (x) {
return x
})(5) // 5
闭包
定义:闭包成为函数闭包,是引用了自由变量的函数。与匿名函数的区别在于,引用了自由变量,且变量与闭包声明周期一样。
const y = 1;
(function (x) {
return x + y
})(5); // 6
lambda
定义:不同语言对匿名函数的称呼,如Java、Python
java只有lambda等于匿名函数,是一种语法糖,且lambda引用的变量必须是effectively final(可以不用什么为final,但是不能修改变量值)
public static void main(String[] args) {
int x = 0;
Arrays.asList(1, 2, 3).forEach(
it -> {
it += 1;
x++; //编译不通过
}
);
}
总结
简单理解
- | 普通函数 | 匿名函数 | 闭包 | lambda |
---|---|---|---|---|
变量名 | 有 | 没有 | 没有 | 没有 |
自由变量 | 不引用 | 引用 | 引用 | 引用 |
变量可变 | - | 不可变 | 可变 | 不可变 |
网友评论