Javascript:回调函数是唯一允许以前瞻性方式引用外部变量的函数吗?

时间:2016-12-22 09:43:16

标签: javascript callback closures

我有以下代码,请注意在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错误。显然,定义需要之前引用它的闭包函数。

我的问题是,是什么允许回调函数以前瞻性的方式引用外部变量?这仅仅是回调函数的独特之处吗?感谢。

1 个答案:

答案 0 :(得分:1)

控制永远不会到达

var counter = 7;

因此,您的数学使用undefined值(counter已声明且可供使用,因为它已被悬挂)。 +=运算符强制undefinedNaNNaN是有毒的。

因此结果。