成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript 預解析的原理及實現

開發 前端
JavaScript是解釋型語言是毋庸置疑的,但它是不是僅在運行時自上往下一句一句地解析的呢?

事實上或某種現象證明并不是這樣的,通過《JavaScript權威指南》及網上相關資料了解到,JavaScript有“預解析”行為。理解這一特性是很重要的,不然在實際開發中你可能會遇到很多無從解析的問題,甚至導致程序bug的存在。為了解析這一現象,也作為自己的一次學習總結,本文逐步引導你來認識JavaScript“預解析”,如果我的見解有誤,還望指正。

JavaScript 預解析的原理及實現

(1) 如果JavaScript僅是運行時自上往下逐句解析的,下面的代碼能正確運行是可以理解的,因為我們先定義函數,然后才調用它。

  1. function showMsg { alert('This is message'); } showMsg; // This is message 

(2) 我們也知道函數可以定義在調用代碼之后,如下代碼也是能正常工作的。看起來調用showMsg的時候showMsg還是沒有定義的,但能正常工作,則表明JavaScript是“預解析”的。

  1. showMsg; // This is message function showMsg { alert('This is message'); } 

(3) 上面是函數的例子,下面再來一個普通變量的例子。以下例子運行將會彈出undefined,表明***句的msg已經是定義了,只是沒有初始化,它與var msg; alert(msg);是一樣的。如果你把下面第二句注釋掉,則會報“msg未定義”錯誤。這亦表明JavaScript是“預解析”的。

  1. alert(msg); //undefined var msg='This is message'; 

(4) 再來看一個例子,加深對JavaScript“預解析”印象。以下代碼你將看到兩次彈出的對話框都是顯示This is message 2,為什么會這樣呢?其實下面一前一后定義了兩個同名函數,后面的showMsg覆蓋了前面定義的(在JavaScript中,同名變量一樣會存在覆蓋問題),等于***個showMsg報廢了。為什么第二次調用的showMsg不是調用它上面定義的那個message 1函數呢?這再次證明JavaScript有“預解析”行為。

  1. showMsg; // This is message 2 function showMsg { alert('This is message 1'); } showMsg; // This is message 2 function showMsg { alert('This is message 2'); } 

(5) JavaScript“預解析”是把變量或函數預解析到它們能調用的環境(變量運行時環境)中。如下代碼看起來alert(msg)之前有看到msg的定義,但是程序運行還是報“msg未定義”錯誤,這是因為函數里定義的變量是函數的私有變量,外面不能直接調用,這表明JavaScript“預解析”并不是把所有定義的變量統一解析到一個全局對象中,比如window。

  1. function showMsg { var msg='This is message'; } alert(msg); // msg未定義 

(6) JavaScript“預解析”是分段進行的,準確說是分

以上就是JavaScript 預解析的原理及實現,希望對你有幫助。

責任編輯:王雪燕 來源: JavaScript/預解析/原理及實現
相關推薦

2019-12-06 10:59:20

JavaScript運行引擎

2022-03-17 08:55:43

本地線程變量共享全局變量

2025-05-27 01:00:00

2020-07-10 09:04:55

HTTPS瀏覽器網絡協議

2018-08-07 16:17:35

JavaMySQL數據庫

2020-11-12 07:32:53

JavaScript

2020-01-13 10:45:35

JavaScript解析前端

2023-11-16 09:01:37

Hadoop數據庫

2012-06-29 13:54:11

Java內存原型

2012-09-21 09:45:59

2019-09-30 08:28:53

Delta LakeSpark數據原理

2020-02-12 16:58:15

JavaScript前端技術

2025-04-29 10:43:57

開發代碼JavaScript

2016-10-21 11:04:07

JavaScript異步編程原理解析

2009-12-07 19:48:10

PHP單元素設計模式

2017-03-02 10:49:37

推薦算法原理實現

2017-02-06 19:26:15

iOSCFArray開源

2015-12-02 14:10:56

HTTP網絡協議代理原理

2015-12-02 15:29:32

HTTP網絡協議代理原理

2021-06-10 08:29:15

Rollup工具前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品毛片无码 | 中文字幕二区 | 操操操日日日 | 一级做a爰片久久毛片免费看 | 亚洲欧美视频 | 国产精品视频入口 | 亚欧洲精品在线视频免费观看 | 国产视频二区 | 黄色欧美在线 | 国内久久精品 | 日韩精品1区2区3区 成人黄页在线观看 | 日韩视频一区二区 | 91在线精品一区二区 | 日韩成人在线播放 | 一级毛片免费 | 99久久久久久久 | xxx.在线观看 | 二区三区在线观看 | 三区四区在线观看 | 亚洲一区二区久久久 | 亚洲成人一区二区 | 高清成人免费视频 | 最新国产精品视频 | 久久精品国产一区二区三区不卡 | 一区二区免费在线 | 99久久国产免费 | 一级电影免费看 | 国产精品.xx视频.xxtv | 精久久久 | 最近日韩中文字幕 | 日韩中文字幕在线免费 | 久久成人国产精品 | 国产成人小视频 | av资源中文在线天堂 | 欧美日韩一区二区在线观看 | 亚洲二区在线观看 | 在线欧美一区 | 免费观看一级黄色录像 | 日韩www | 欧美日韩亚洲视频 | 中文字幕亚洲视频 |