是否存在引用正在创建的变量的风险?

时间:2013-10-24 08:14:50

标签: javascript scope closures

我通常会这样做:

var x; 
x = new Slider({
    'dragstart' : function(e,ui){
        // blablabla
        x.addClass('being-dragged'); // using X here.
        // blablabla 
    }
});

相反,我应该自信吗

var x = new Slider({
    'dragstart' : function(e,ui){
        // blablabla
        x.addClass('being-dragged'); // using X here.
        // blablabla 
    }
});

我看到事物的方式,x在构造该函数时在本地范围内不存在,所以我一直担心它可能从全局,窗口或找到的任何地方选择另一个x

1 个答案:

答案 0 :(得分:1)

  正在构造该函数时,

x在本地范围内不存在

dragstart函数在被调用之前不会被“构造”。如果在调用时xundefined,则会失败。 x当时undefined唯一的方法是从dragstart构造函数调用Slider函数(在这种情况下构造函数没有返回实例,所以x仍有默认值隐式undefined)。

否则,当调用dragstart时,对x的引用将按预期解析为外部作用域中的x