javascript作用域鏈

2021-09-11 15:54:30 字數 991 閱讀 6264

首先我們來看一段**,然後通過分析這段**來說明作用域鏈的這個問題,**如下:

console.log(total);

var total=0;

function fn(num1,num2)

fn(100,200)

console.log(total);

複製**

這段**輸出的結果為:

undefined

undefined

3000

window作用域下的執行順序,如下圖:

1 如何區分私有的和全域性的?

第一:在全域性作用域下宣告(預解析)的變數是全域性變數。

第二:在私有作用域中生成的變數和函式的形參都是私有變數。

第三:如果在私有作用域中遇到乙個變數,如果能判斷是私有變數,那麼它與外界的任何內容都沒有關係。如果不是私有變數,那麼則往當前作用域的上一級進行查詢,如果上級也沒有,一直往上查詢,直到window。(其實這個就是作用域鏈)

複製**

2 函式的私有作用域的執行順序

當函式在執行的時,執行的是函式體內的內容,所以函式首先會形成乙個新的私有的作用域。

第一步:函式的有形參,那麼就先給形參賦值

第二步:進行私有域中的預解釋

第三步:私有域中的**從上到下的執行

如下圖是:函式體執行的順序:

複製**

函式形成乙個新的作用域,用來保護裡面的私有變數,不受到外界變數的影響,同時也不影響外界變數,這種情況我們叫「閉包」

作用域的預解析對於var變數只是定義但是不會賦值,賦值是在執行的時候進行賦值的

函式裡面判斷是否是私有的變數,就看是否是形參和前面是否有var宣告符號

JavaScript 作用域,作用域鏈詳解

前言 es5缺少區域性作用域的概念,而es6已經補充了es6的概念。一 作用域 把作用域比作乙個個封閉的方塊,在相同乙個封閉方塊中的物體可以相互接觸,但是無法和別的封閉方塊中的物體直接接觸。二 全域性作用域 這個就是簡單的全域性作用域。全域性作用域相當於乙個最大的封閉空間,他裡面還有乙個個小的封閉空...

Javascript的作用域域作用域鏈的理解

如何解析一段可執行 分了兩個階段 解析 和執行 其中解析 可以理解為記名字,就是先把關鍵字var和function定義的變數名登記了下來,這也就有了變數提公升這一說。在執行 階段才是真正的執行賦值,運算等操作。暫不解析這幾個名詞,先來看乙個例子。var scope global function f...

07 javascript作用域與作用域鏈

理解 就是一塊 地盤 乙個 段所在的區域 它是靜態的 相對於上下文物件 在編寫 時就確定了 分類全域性作用域 函式作用域 沒有塊作用域 es6有了 作用 隔離變數,不同作用域下同名變數不會有衝突 es5 沒塊作用域 if true console.log c 3 var a 10,b 20 func...