【问题标题】:Are there any risks of referencing the variable that's being created?引用正在创建的变量是否有任何风险?
【发布时间】:2013-11-02 20:10:39
【问题描述】:

我通常这样做:

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

【问题讨论】:

  • 您的 sn-ps 由于吊装而完全等效。顺便说一句,在您创建拖动处理函数之后是否将新变量添加到范围内甚至都没有关系,它仍然可用。

标签: javascript scope closures


【解决方案1】:

x 在构造该函数时不存在于本地范围内

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

否则,当调用dragstart 时,对x 的引用将解析为您所期望的外部范围内的x

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2022-01-09
    • 2020-12-19
    • 2016-11-19
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多