javascript
未定义函数或变量_变量提升:JavaScript是顺序执行,为什么变量在定义之前执行不会报错而是报Underfined...
按照JavaScript 是按順序執行的邏輯來理解的話,當執行到第 1 行的時候,由于函數 showName 還沒有定義,所以執行應該會報錯;同樣執行第 2 行的時候,由于變量 myname 也未定義,所以同樣也會報錯。
而事實上,第 1 行輸出“函數 showName 被執行”,第 2 行輸出“undefined”,這和前面想象中的順序執行有點不一樣啊!
如果沒有定義變量或函數,代碼還能繼續執行嗎,試一下,顯然不能會報錯;因此得出一下結論:
1、在執行過程中,若使用了未聲明的變量,那么 JavaScript 執行會報錯。
2、在一個變量定義之前使用它,不會出錯,但是該變量的值會為 undefined,而不是定義時的值。
3、在一個函數定義之前使用它,不會出錯,且函數能正確執行。
這就是JS中的變量提升:所謂的變量提升,是指在 JavaScript 代碼執行過程中,JavaScript 引擎把變量的聲明部分和函數的聲明部分提升到代碼開頭的“行為”。變量被提升后,會給變量設置默認值,這個默認值就是我們熟悉的 undefined。從概念的字面意義上來看,“變量提升”意味著變量和函數的聲明會在物理層面移動到代碼的最前面,正如我們所模擬的那樣。但,這并不準確。實際上變量和函數聲明在代碼里的位置是不會改變的,而且是在編譯階段被 JavaScript 引擎放入內存中。一段 JavaScript 代碼在執行之前需要被 JavaScript 引擎編譯,編譯完成之后,才會進入執行階段。
總結:
JavaScript 代碼執行過程中,需要先做變量提升,而之所以需要實現變量提升,是因為 JavaScript 代碼在執行之前需要先編譯。
在編譯階段,變量和函數會被存放到變量環境中,變量的默認值會被設置為 undefined;在代碼執行階段,JavaScript 引擎會從變量環境中去查找自定義的變量和函數。
如果在編譯階段,存在兩個相同的函數,那么最終存放在變量環境中的是最后定義的那個,這是因為后定義的會覆蓋掉之前定義的。
總結
以上是生活随笔為你收集整理的未定义函数或变量_变量提升:JavaScript是顺序执行,为什么变量在定义之前执行不会报错而是报Underfined...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js ...运算符_「 giao-js
- 下一篇: 昆仑通态触摸屏数据转发上传_嵌_Modb