日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

未定义函数或变量_变量提升:JavaScript是顺序执行,为什么变量在定义之前执行不会报错而是报Underfined...

發布時間:2025/3/15 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 未定义函数或变量_变量提升:JavaScript是顺序执行,为什么变量在定义之前执行不会报错而是报Underfined... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
showName() console.log(myname) var myname = 'hhh' function showName() {console.log('函數showName被執行'); }

按照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...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。