JS變數提升(var)
阿新 • • 發佈:2022-03-03
先看以下這種情況(控制檯輸出a,在輸出class,但是報錯):
說明在程式執行之前,解析器會先把咱們的程式碼分析一遍,在分析的過程中,他就執行了變數提升!
來看以下幾種情況:
<script> console.log(web); var web = "I Love u"; </script>
這種情況下不會報錯,但是控制檯會輸出undefined.(如果變數只宣告,沒有賦值,它的值就是undefined)
為什麼不會報錯:var web = "I Love u";這句話代表兩步,var web ; web = "I Love u";
在解析器分析的時候,把var web;這句話放到最前面,所以上面程式碼等同於:<script> var web; console.log(web); web = "I Love u"; </script>
再看一個函式的例子:
<script> function hd(){ if(false){ var web = "jamesHarden"; } console.log(web); } hd(); </script>
很明顯,if語句裡面的var .....根本不會執行,但是這個程式最終輸出的是undefined,原因就是變數提升。
解析器會把var web;這句話放到最前面執行,所以就出現了undefiend。