国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

JavaScript預解析

2024-04-27 15:10:06
字體:
來源:轉載
供稿:網友
定義

預解析:在當前作用域下,js運行之前,會把帶有var和function關鍵字的事先聲明,并在內存中安排好。然后再從上到下執行js語句。

預解析只會發生在通過var定義的變量和function上。

var

通過var關鍵字定義的變量進行預解析的時候:都是聲明declare,不管它有沒有賦值,都會賦值undefined。

alert(a); //undefined var a = 1; alert(b); //undefined var b = function(){ } alert(c); //undefined var c; 只要是通過var定義的,不管是變量,還是函數,都是先賦值undefined,如果是變量,也不管變量有沒有賦值,在預解析階段,都是會被賦值為undefined。

function

function進行預解析的時候,不僅是聲明而且還定義(define)了,但是它存儲的數據的那個空間里面存儲的是代碼是字符串,沒有任何意義。

alert(a); //彈出的是下面的function function a(){   alert(“預解析function”) } 注意這種情況

定義一個函數想要立即執行,寫成如下形式是不可行的,在預解釋的時候,它把它分解成兩部分來對待,第一部分是fn函數,而第二部分是(),一個匿名函數,執行時會報錯。如果小括號帶參數,如(2),雖然不會報錯,會打印出來2,但并不能把fn執行,也不能當成參數傳遞給fn函數。

function fn(){ //代碼區 }() 如果你想實現立即執行的函數,可以把要執行的函數放到一對括號里面,對于javaScript 來說,括弧()里面不能包含語句,所以在這一點上,解析器在解析function關鍵字的時候,會將相應的代碼解析成function表達式,而不是function聲明所以,只要將大括號將代碼(包括函數部分和在后面加上一對大括號)全部括起來就可以了。 如下:

(function fn(){ //代碼區… }()) 還可以寫成:閉包。

(function(){ //代碼區… })(); 4. 預解析需要注意的情況

預解析是發生在當前作用域下的,剛開始的時候,我們預解析的是全局作用域,在js中我們的global就是我們的window。 我們運行函數的時候會生成一個新的私有作用域(每次執行都是新的,執行完成就銷毀)這個作用域下我們可以理解為開辟了一個新的內存空間。在這個內存中我們也要執行預解析。當我們的函數執行完成后,這個內存或者作用域就會銷毀 如果在當前作用域下的一個變量沒有預解析,就會向它的上一級去找,直到找到window,如果window下也沒有定義,就會報錯。所以,在函數內通過var定義的變量是局部變量,沒有能過var 定義的變量是全局變量。 預解析不會在同一個變量上重復的發生,也就是一個變量如果已經在當前作用域下預解析了,不會再重復解析。 等號右邊的function不會進行預解析。 alert(a); fn(); var a = function fn(){}; 第一次打印undefined,第二次報錯,未定義,因為預解析的時候,=號右邊是不進行預解析的。

預解釋是不受其它if或者其它判斷條件影響的,也就是說,即使條件不成立,我們里面只要有var或者function也會被預解釋。if,while alert(a); //undefined if(1==2){   var a=12; } 后面定義的會覆蓋前面定義的 alert(a); //彈出后面的function function a(){ var b; } alert(a); //仍然彈出后面的function,因為function是提前預解析的 function a(){ var c; } Javascript“預解析”是分段進行的,準確說是分


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台南市| 天台县| 广水市| 青海省| 玛曲县| 老河口市| 洪江市| 分宜县| 阿瓦提县| 宁波市| 南昌县| 广宁县| 马公市| 贵阳市| 疏勒县| 成安县| 北流市| 离岛区| 邢台市| 邮箱| 邳州市| 彰武县| 当雄县| 张家港市| 托里县| 前郭尔| 茶陵县| 吉木乃县| 介休市| 通渭县| 交城县| 濮阳县| 平泉县| 迭部县| 瑞昌市| 澄迈县| 榆林市| 中西区| 平安县| 合江县| 百色市|