我正在觀看JavaScript範圍的視頻,它表示在瀏覽器解釋java腳本代碼之前,它實際上涉及到一個快速編譯步驟(並不完全是「編譯」不涉及創建中間文件),它在各自的範圍內註冊變量和函數聲明。 所以,如果我寫:在Java腳本中註冊變量和函數聲明
var a = 3;
function foo(){
var c = 2;
}
之前上面的表達式,這意味着忽略R.H.S.評估部分變量'a'和函數'foo'將在全局範圍內註冊並且在'foo'範圍內,變量'c'將被註冊。 完成這一編譯步驟後,表達式將被評估其值。
但是,當我們寫會發生什麼:
var a = function(){
var c;
}
將編譯步驟只是註冊變量「a」在全球範圍內,並跳過函數聲明和變量「c」的聲明,因爲編譯步驟應該跳過R.H.S.部分和評估表達式在解釋器部分?
a仍然是一個全局函數,函數是匿名函數表達式,它將被評估位置,它不會像命名/聲明的函數那樣被提升,並且c仍然被註冊爲函數範圍的局部。 – zer00ne