一、變數提公升和函式提公升
變數宣告提公升
函式宣告提公升
//面試題 : 輸出 undefined
//undefined 變數提公升
fn2(
)//可呼叫 函式提公升
fn3(
)//不能 變數提公升
二、執行上下文
**分類(根據位置分)
全域性執行上下文
開始執行全域性**
函式執行上下文
開始執行函式體**
三、執行上下文棧
在全域性**執行前,js引擎就會建立乙個棧來儲存管理所有的執行上下文物件
在全域性執行上下文(window)確定後, 將其新增到棧中(壓棧)
在函式執行上下文建立後,將其新增到棧中(壓棧)
在當前函式執行完後,將棧頂的物件移除(出棧)
當所有的**執行完後,棧中只剩下window
//1. 進入全域性執行上下文
var a =10;
varbar
=function
(x);
varfoo
=function
(y);
bar(10)
//2. 進入bar函式執行上下文
6. 例題:
console.
log(
'gb: '
+ i)
;var i =1;
foo(1)
;function
foo(i)
console.
log(
'fb:'
+ i)
;foo
(i +1)
;//遞迴呼叫: 在函式內部呼叫自己
console.
log(
'fe:'
+ i)
}console.
log(
'ge: '
+ i)
問:
gb: undefined
fb: 1
fb: 2
fb: 3
fe: 3
fe: 2
fe: 1
ge: 1
5次
四、面試題
先執行變數提公升, 再執行函式提公升。
1. 測試題1:
functiona(
)var a;
console.
log(
typeof a)
;// 'function'
2. 測試題2:f(!
(b in window)
)console.
log(b)
;// undefined
3. 測試題3:var c =1;
function
c(c)
//1c(
2)// 報錯
js執行上下文與執行上下文棧
在了解js的執行上下文物件與執行上下文棧之前,我們要先了解兩個概念 即變數提公升跟函式提公升 變數提公升 通過var定義的變數,在定義語句之前我們就可以直接訪問到,不過它的值是undefined 函式提公升 通過function定義的函式,在函式定義語句前,我們就可以直接呼叫 變數提公升與函式提公升...
JS執行上下文
執行上下文,即context,也不知道是誰翻譯的,不少的文獻 書籍用的都是這個詞。還記得第一次接觸這個詞時的惆悵 迷惘 不知所措,扶了扶眼鏡,翻開大辭典,還是翻譯成環境比較接地氣。js執行上下文,即js的執行環境。當我們的 執行時,會進入到不同的執行上下文,即不同的環境。在不同的環境中,有著不同的 ...
js高階 執行上下文棧
就是用來存全域性上下文物件和函式上下文物件的棧容器。在全域性 執行之前,js引擎就會建立乙個棧容器來儲存管理所有的執行上下文物件。在全域性執行上下文 window 確定後,將其新增到棧中 壓棧 在函式執行上下文建立後,將其新增到棧中壓棧 在當前函式執行完後,將棧頂的物件移除 出棧 當所有的 執行完後...