作用域的理解

2021-10-05 03:20:07 字數 915 閱讀 7015

什麼是作用域

作用域就是一套規則,控制著變數和函式的可訪問範圍。作用域外無法引用作用域內的變數,離開作用域後,作用域的變數的記憶體空間會被清楚,比如執行完函式。

什麼是預解析

就是在瀏覽器解析**之前,把變數的宣告和函式的宣告提公升到該作用域的最上面

什麼是變數提公升

變數提公升就是在進入乙個執行上下文後,函式和變數的宣告會被js的直譯器放到最上面。即全域性作用域中宣告的變數會提公升至全域性最頂層,函式內宣告的變數只會提公升至該函式作用域的最頂層。

什麼是作用域鏈

作用域鏈主要進行識別符號(變數和函式)的查詢,識別符號解析就是沿著作用域鏈一級一級的搜尋識別符號的過程,而作用域鏈就是保證對變數和函式的有序查詢。

什麼是自由變數

在當前作用域中存在但未在當前作用域宣告的變數。自由變數通常會經過作用域鏈一層一層向上查詢,一旦出現自由變數,就肯定會有作用域鏈。

什麼是執行環境

執行環境也叫做執行上下文。每乙個作用域下都有乙個自己的執行環境,**也都會在自己的執行環境下執行。每個執行環境都有乙個與之關聯的變數物件,這個變數物件儲存著執行環境中定義的所有函式和變數。執行環境又分為兩種,分別是全域性執行環境和函式執行環境。

函式執行環境就是如果當前是乙個函式執行環境那麼他的變數物件就是該函式的活動物件(什麼是活動物件?在函式被呼叫後,就會建立乙個活動物件。活動物件在函式執行環境中作為變數物件使用)。作用域鏈的下乙個變數物件來自所包含這個函式的環境,再下乙個變數物件來自下乙個包含環境,一直延續到全域性執行環境。

全域性執行環境在瀏覽器中指的就是window物件。全域性執行環境的變數物件永遠都是作用域鏈中的最後乙個物件。

作用域理解

例1如下 include int main while test 5 域外 printf n域外 test d t域外 p n test,test return 0 執行結果如下 lnz lnz c test gcc action scope.c lnz lnz c test a.out 域外 te...

全域性作用域 函式作用域 塊級作用域的理解

作用域是任何一門程式語言中的重中之重,因為它控制著變數與引數的可見性與生命週期。很慚愧,我今天才深入理解js的作用域.我不配做乙個程式設計師.開玩笑,什麼時候理解都不晚,重要的是理解了以後能不能深深地扎在記憶裡,不能,那就寫下來在乙個 塊 括在一對花括號中的一組語句 中定義的所有變數在 塊的外部是不...

關於作用域的理解

由花括號括起來的整體作為乙個塊,塊中的變數都具有塊作用域,僅僅在塊中可見。函式的形式參量雖然在左花括號之前,但仍具有塊作用域,塊作用域的可見範圍是從定義出開始到塊。宣告在內層塊的變數,其作用域僅僅侷限於該宣告所在的塊。double blocky double cleo q 作用域結束 return ...