我有以下代码,请注意在close
事件的回调函数中,对回调本身之后的变量ConnectingLine
的引用:
$('.tabs').tabs({
close: function(event, ui) {
ConnectingLine.show();
}
});
var ConnectingLine = MyHelpers.connectingLine({options here...});
我假设这种引用适用于任何类型的闭包,但事实证明并非如此。例如:
var add = (function () {
return function () {return counter += 1;}
var counter = 7;
})();
function myFunction(){
document.getElementById("demo").innerHTML = add();
}
上面的代码会破坏,导致NaN错误。显然,定义需要之前引用它的闭包函数。
我的问题是,是什么允许回调函数以前瞻性的方式引用外部变量?这仅仅是回调函数的独特之处吗?感谢。
答案 0 :(得分:1)
控制永远不会到达
var counter = 7;
因此,您的数学使用undefined
值(counter
已声明且可供使用,因为它已被悬挂)。 +=
运算符强制undefined
到NaN
和NaN
是有毒的。
因此结果。