2013-10-24 65 views
2

我通常做:引用正在創建的變量是否有風險?

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

由於吊裝,您的代碼段完全相同。順便說一句,在創建拖動處理函數之後,如果將一個新變量添加到範圍中,則無關緊要,它仍然可用。 – Bergi

回答

1

x當正在構建了功能

dragstart功能沒有得到「建造」,直到它被調用不會在局部範圍存在。如果x在調用時爲undefined,則將失敗。當時x將爲undefined的唯一方法是如果從構造函數Slider構造函數調用dragstart函數(在這種情況下,構造函數沒有返回實例,所以x仍然具有其隱含的缺省值undefined)。

否則,當調用dragstart時,對外部作用域的引用將會按照您的預期解析爲x

+0

所以我可以安全地使用第二種選擇,對吧? –

相關問題