執行檔案的時候會先建立乙個全域性執行上下文
它由兩部分組成
執行檔案分為兩個過程
執行階段
this 當建立全域性上下文或者函式上下文的時候會被建立
const x = 'x'
function test()
test()
在呼叫test的時候會建立函式執行上下文
我們執行**是在乙個執行棧中新增和彈出,出現函式的時候會建立乙個新的執行上下文新增到執行棧中,當新進來的執行上下被執行結束後推出棧中,如果函式中呼叫另外乙個函式則會巢狀生成函式執行上下文,例如下面的則會在執行棧中新增, 從下到上依次是: 全域性上下文、 test函式執行上下文、 test2函式執行上下文
const x = 'x'
function test()
function test2()
test()
example:
const name = 'kangkang'
function showname(name)
showname(name)
對於作用域來說,如果巢狀內的函式作用域沒有使用的變數,它將往上查詢最近的父級上下文,一直到全域性上下文
function test(value)
}let add = test(3)
let addresult = add(2)
console.log(addresult)
test函式中返回了乙個test2函式,add則是乙個函式add = funtion test2(y)
,addresult = 3 + 2
建立全域性上下文 分配變數、執行全域性上下文到test(3)被執行到的時候建立乙個新的函式上下文
函式內建立的變數沒有帶了let const var 則會預設新增到全域性上下文的全域性物件上,而頂層建立的var 等變數會自動新增到 全域性上下文中的全域性物件上[瀏覽器上面是 window, node是global object ]
funtion test()
var y = 'bb'
使用this指明當前實在那個作用域內使用 js執行過程
執行過程 1.宿主環境 瀏覽器 把一段 給js引擎 js引擎按順序執行 因為是宿主環境發起,這也是一條巨集任務 2.需要知道每個巨集觀任務尾部會跟著微任務佇列 當有微觀任務出現,會把他放在微任務佇列中,在上一步的巨集任務執行完後再執行 3.若有巨集觀任務出現,會放入巨集觀任務佇列中,等待上一步微任務...
js 函式執行過程
函式執行過程中 1.每使用乙個變數,函式都會由近到遠的遍歷自己的好友列表中的作用域物件。2.如果在離自己近的格仔中找到了區域性變數,就優先使用區域性變數,不再去全域性找。3.如果在離自己近的格仔中沒找到要用的區域性變數,才被迫去全域性找,如果在全域性找到了想用的變數,則本次修改結果,會影響全部變數的...
js的解析與執行過程
當輸入如下 時候 var a 1 function crli crli 1結果為 1 當改變下面 時候 var a 1 function crli crli undefined結果為 undefined 這是為什麼呢?js解析與執行過程一共有2個階段,乙個預處理階段,乙個是執行階段 可以看成全域性預...