我在javascript thanks to this fantastic stackoverflow answer中熟悉了闭包。我注意到如果我有以下代码:
function main(){
var a = 5;
var b = 5;
inner();
function inner(){
$('#btn').on('click', function(){
alert(a + b);
});
}
}
每次点击10按钮都会收到提醒。但是,与stackoverflow中的示例不同,回答内部函数不会被返回。
我在示例中给出的事件监听器是否像返回的闭包内部函数一样记住它们的范围?
答案 0 :(得分:2)
不必返回闭包,任何在包含函数外部获取引用的机制都将使用它来保存环境。因此,不是返回函数,而是将其分配给全局变量,例如
var fun;
function main() {
var a = 5;
var b = 5;
fun = function() {
alert(a + b);
};
}
main();
fun();

事件侦听器只是与DOM元素关联的全局数据结构,而闭包的工作方式与此相同。