js的變數作用域是離它最近的封閉語塊或**塊,包含他們內部的函式.
在**塊中宣告會被隱式的提公升到封閉函式的頂部
1function()6
var y=1;
7 }
上面的**會被js解釋成下面的格式
1 function()8 }
有時候我們會不小心的在函式內部重新宣告了已有的變數
functiontext(x)
}
如果我們把變數的宣告和賦值看做兩部份,就會比較好理解js (如var x=0;看做var x; x=0;) 根據隱式提公升規則
functiontext(函式傳入的值)
}
特殊情況 js的異常捕獲catch(x){} x的作用域僅在catch語塊內
functiontest()
catch
(x)result.push(x);
return
result;
}test();
//["var", "catch", "var"]
JS變數宣告和函式宣告提公升
很多時候,在直覺上,我們都會認為js 在執行時都是自上而下一行一行執行的,但是實際上,有一種情況會導致這個假設是錯誤的。a 2 var a console.log a 按照傳統眼光,console.log a 輸出的應該是undefined,因為var a在a 2之後。但是,輸出的是2。再看第二段 ...
JS中的變數宣告提公升
js是一種指令碼語言,和一些高階語言不同,它沒有完整編譯的過程,一般是邊寫邊編譯,這也是我們覺得指令碼語言比其他語言載入快的原因,其實,js中有變數宣告提公升這一機制。當js在執行的時候會分為2個階段,預解析,執行,當js在執行的時候會將所有用var宣告的變數以及關鍵字定義的函式進行提公升 func...
JS 宣告提公升
一 js解析機制 遇到 script 標籤的話 js 就進行預解析,將變數 var 和 function 宣告提公升,但不會執行 function,然後就進入上下文執行,上下文執行還是執行預解析同樣操作,直到沒有 var 和 function,就開始執行上下文。二 宣告提公升 函式宣告和變數宣告總是...