js中申明變數需注意
申明:本文是js系列筆記之一,有不正確的地方請儘管指出,大家相互學習,共同進步;
js語言分嚴格模式strict與非嚴格模式,
問題產生:在非嚴格模式下, 如果某個變數被初始化,而沒有事先宣告;那麼該變數會自動被新增到全域性作用域中;看下邊的現象:
非常出乎意料的結果
再試試下邊:
和上邊比較下,覺得有點意思了
想想為什麼會這樣:再試試下邊
舉一隅不以三隅反?
看到這裡相信大家都明白了,開始所述,必須有一個前提,那麼就是方法被呼叫過,或者該變數被使用過,為什麼會這樣,我猜測大概是這樣得方法在未被呼叫之時,只是宣告瞭,方法內部,js執行緒是不去管的,只有在被呼叫時,執行緒執行到方法中,該變數被使用,才會被js新增到全域性作用域中;
前邊提到了,嚴格模式;上邊所說的結果都是在非嚴格模式下才會出現的結果,在嚴格模式下,沒有被申明的變數,突然冒出來,會直接暴出 未被定義的error;順便說下,嚴格模式下,js不讓使用with語句的,,這也證明了我在前邊對with的理解,js本身都不建議使用with語句;
js有太多的靈活性與不確定性,這也導致了其 缺陷;
作者:XBGG
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2480/viewspace-2813610/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- nodejs在typescript專案中申明全域性變數NodeJSTypeScript變數
- JS中的變數JS變數
- JS變數分析JS變數
- JS中的變數賦值深入理解JS變數賦值
- js-js的全域性變數和區域性變數JS變數
- JS變數作用域JS變數
- 前端 -- JS變數提升前端JS變數
- 關於js變數提升JS變數
- JS變數比較陷阱JS變數
- js宣告全域性變數JS變數
- 部落格同步申明
- JS 的學習理解--->變數JS變數
- js檔案中如何讀取app.ux中的全域性變數JSAPPUX變數
- Js基礎知識(一) – 變數JS變數
- JS 變數儲存?棧 & 堆?NONONO!JS變數
- JS——變數提升和函式提升JS變數函式
- process node.js全域性變數Node.js變數
- 5.3_前端筆記-js變數前端筆記JS變數
- JS變數和執行環境JS變數
- c++中的變數型別_C ++中的變數C++變數型別
- JS變數宣告和函式宣告提升JS變數函式
- 深入學習js之——變數物件#4JS變數物件
- 死磕JavaScript-鬆散型別、js變數儲存模型、變數提升JavaScript型別JS變數模型
- Python中類變數、成員變數、區域性變數的區別Python變數
- three.js 著色器材質之變數(二)JS變數
- three.js 著色器材質之變數(一)JS變數
- three.js 著色器材質內建變數JS變數
- JS如何動態生成變數名[重點]JS變數
- js作用域(變數提升,預解析)例題JS變數
- Nuxt.js 環境變數配置與使用UXJS變數
- js變數與函式常識學習JS變數函式
- JS 會有變數提升和函式提升JS變數函式
- 好程式設計師web前端分享web測試之Js中的變數程式設計師Web前端JS變數
- postman中各種變數Postman變數
- MySQL中的@變數名MySql變數
- MariaDB/MySQL中的變數MySql變數
- CentOS shell中的變數CentOS變數
- Python中的全域性變數和區域性變數Python變數