一.什么是闭包
1闭包:闭包是指在一个函数里面定义的函数,该函数可以访问并操作其所在函数的内部变量和参数,即使在其所在函数执行完毕后依然有效。下面为完整代码
public class ClosureExample {
public static void main(String[] args) {
int factor = 2;
Operation multiplier = createMultiplier(factor);
int result = multiplier.apply(5);
System.out.println(result); // 输出 10
}
private static Operation createMultiplier(int factor) {
return new Operation() {
@Override
public int apply(int number) {
return number * factor; // 使用了所在函数的参数factor
}
};
}
interface Operation {
int apply(int number);
}
}
在createMultiplier
方法中,我们传入了一个参数factor
,并且在匿名内部类的apply
方法中使用了这个变量。这就创建了一个闭包,匿名内部类可以访问并操作factor
变量,即使createMultiplier
方法已经执行完毕。
function outer() {
var x = 10;
function inner() {
console.log(x); // 访问外部函数的变量x
}
return inner; // 返回内部函数
}
var closure = outer(); // 调用外部函数并将返回的内部函数保存在变量中
closure(); // 输出 10
当然还有更简单的代码详解如上。
在上面的示例中,我们定义了一个outer
函数,它包含了一个局部变量x
和一个内部函数inner
。内部函数inner
可以访问外部函数outer
的变量x
。最后,我们通过调用outer
函数并将返回的inner
函数保存在变量closure
中。然后,我们调用closure
函数,它将输出变量x
的值,即 10。内部函数inner
可以访问其外部函数outer
的变量x
,即使在outer
函数执行完毕后依然有效---闭包。