js的解析與執行過程

2021-07-22 14:56:16 字數 1689 閱讀 4719

當輸入如下**時候

var a = 1;

function

crli

()crli()//1

結果為 1

當改變下面**時候

var a = 1;

function

crli

()crli()//undefined

結果為 undefined

這是為什麼呢?

js解析與執行過程一共有2個階段,乙個預處理階段,乙個是執行階段(可以看成全域性預處理階段和執行階段,以及函式預處理階段和執行階段)

當js解析**時候,會先建立乙個lexical environme這麼乙個物件,然後掃瞄js**兩個部分:

乙個是用宣告方式建立的函式,

另乙個是用var 定義的變數,

然後把函式和變數的名字加到lexical environme中,比方說

lexical environme(**全域性的環境物件===window**)

var a =5;

b = 1;

function

crli

()

如果非函式宣告、非var方式宣告的變數,則預處理階段不會將函式和變數的名字加到lexical environme中

例子1:

a();//aa

b();//b is not a function

function

a()

var b = functionb()

lexical environme

例子2:

console.log(a);//

undefined

console.log(b);//b is

not defined

var a = 1;

b = 2;

lexical environme

當遇到函式宣告有衝突時候後者會覆蓋前者,

變數宣告有衝突時候,會忽略

alert(f);//functionf()

functionf()

var f = 5;

window

alert(f);//functionf()

functionf()

var f = 5;

functionf()

window

function

f(a,b)

}f(1,2)//function a(){}

//2當遇到函式宣告有衝突時候後者會覆蓋前者,

變數宣告有衝突時候,會忽略

lexical environme lexical environme

}

此時解釋

var a = 1;

function

crli

()crli()//undefined

window

lexical environme

函式預處理

執行時,alert(a) 所以是undefind

JS 1 解析與執行

js執行會分為2段,第一段是預處理階段,在window中,第二階段是執行階段,賦值 一 js全域性預處理階段,會載入 1 用宣告的方式建立函式 2 用var定義的變數 舉例 f g var g function 函式表示式 報錯 function f 宣告的方式 console.log a cons...

js執行過程

執行過程 1.宿主環境 瀏覽器 把一段 給js引擎 js引擎按順序執行 因為是宿主環境發起,這也是一條巨集任務 2.需要知道每個巨集觀任務尾部會跟著微任務佇列 當有微觀任務出現,會把他放在微任務佇列中,在上一步的巨集任務執行完後再執行 3.若有巨集觀任務出現,會放入巨集觀任務佇列中,等待上一步微任務...

JS的解析與執行 全域性預處理

js的的解析與執行主要分為兩個階段,一是預處理階段,二是執行階段。js 的執行並不是讀取一行 處理一行 在正式執行 這個階段之前有乙個預處理階段。在預處理階段,我們人為分成全域性 和函式內部 因為兩者有少許差別,因此我們分開講解。今天我們主要講全域性預處理。全域性預處理就的第一步是建立lexical...