js中申明變數需注意

wh7577發表於2021-09-09

申明:本文是js系列筆記之一,有不正確的地方請儘管指出,大家相互學習,共同進步;

js語言分嚴格模式strict與非嚴格模式,

問題產生:在非嚴格模式下, 如果某個變數被初始化,而沒有事先宣告;那麼該變數會自動被新增到全域性作用域中;看下邊的現象:

圖片描述


非常出乎意料的結果

再試試下邊:

圖片描述

和上邊比較下,覺得有點意思了

想想為什麼會這樣:再試試下邊

圖片描述

舉一隅不以三隅反?

看到這裡相信大家都明白了,開始所述,必須有一個前提,那麼就是方法被呼叫過,或者該變數被使用過,為什麼會這樣,我猜測大概是這樣得方法在未被呼叫之時,只是宣告瞭,方法內部,js執行緒是不去管的,只有在被呼叫時,執行緒執行到方法中,該變數被使用,才會被js新增到全域性作用域中;

前邊提到了,嚴格模式;上邊所說的結果都是在非嚴格模式下才會出現的結果,在嚴格模式下,沒有被申明的變數,突然冒出來,會直接暴出 未被定義的error;順便說下,嚴格模式下,js不讓使用with語句的,,這也證明了我在前邊對with的理解,js本身都不建議使用with語句;

圖片描述

js有太多的靈活性與不確定性,這也導致了其 缺陷;



作者:XBGG
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2480/viewspace-2813610/,如需轉載,請註明出處,否則將追究法律責任。

相關文章