2014-04-01 120 views
2

做變量初始化獲取/存儲在內存中,如果它們駐留在其中不執行if語句,如下面的:的Javascript節省內存 - 如果聲明變種聲明

function blah(){ 
    if(something === true){ 
     var blahOne = 1; 
     var blahTwo = 2; 
     var blahThree = 3; 
    } else { 
     console.log('The above if statement usually won\'t execute'); 
    } 
} 

我的假設是沒有的,但JavaScript至少可以說是一種古怪的語言。在此先感謝您的幫助!

+5

http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting – zerkms

回答

4

所有var聲明被移動到函數的頂部並初始化爲undefined。這就是所謂的可變吊裝。 JavaScript沒有塊範圍,只有功能和全局範圍。

您的代碼等同於以下

function blah(){ 
    var blahOne, blahTwo, blahTree; 
    if(something === true){ 
     blahOne = 1; 
     blahTwo = 2; 
     blahThree = 3; 
    } else { 
     // blahOne, blahTwo, blahThree are set to undefined 
     console.log('The above if statement usually won\'t execute'); 
     // But since they have been declared, there's no error in reading them 
     console.log(blahOne, blahTwo, blahThree); 
    } 
} 
+0

啊對。謝謝胡安! –

1

有像在JavaScript中block scope沒有的事情。看到這個article。如果你想這樣說:Javascript有函數範圍。所以你的問題的答案是yes他們得到初始化。

+1

他們得到初始化,但不是'1,2,3',最好說他們得到聲明,但沒有初始化,因爲他們的值將不確定,如果'something!== true' –

+0

我沒有這樣說。我只說:他們得到初始化,必須被垃圾收集。 –

+0

^我熟悉吊裝的一般想法,但實際上對你剛纔說的胡安很好奇。不確定這些值是否隨着聲明而升高。 –