js的變數作用域是函式級的,在js裡沒有類似c語言的塊級作用域。
js程式設計環境的頂級作用域是window物件下的範圍,稱為全域性作用域,全域性作用域中的變數稱為全域性變數。
js中的全域性變數相當於js中頂級作用域(window)的屬性。
js函式內的變數無法在函式外面訪問,在函式內卻可以訪問函式外的變數,函式內的變數稱為區域性變數。
js函式可以巢狀,多個函式的層層巢狀構成了多個作用域的層層巢狀,這稱為js的作用域鏈。
注意,變數的宣告在**解析期完成,如果當前作用域的變數的宣告和賦值語句寫在變數訪問語句後面,js函式會認為當前作用域已經存在要訪問的變數不再向上級作用域查詢,但是,由於變數的賦值發生的**執行期,訪問的到變數將是undefined。
var a = 10;
var b = 2;
var c = 10 ;
this.a = 0; // 這裡的this指向的是頂級作用域(window) 所以 現在的變數a的value變為啦0
function
fn()
}
下邊在說一下函式宣告整體提公升和變數宣告提公升
變數宣告提公升其實是把變數生命提公升到當前函式的最頂端賦值為undefined下面看乙個例子函式宣告整體提公升是把函式宣告以及函式的**塊全部提公升到函式的最頂端
demo() // 1 因為函式宣告整體提公升的原因把這個demo函式提公升到啦最頂端 所以會執行 。 其實你把函式函式執行寫在函式宣告上邊或者下邊其實都是一樣的
function
demo
()
那麼兩個提公升到底是誰會先提公升呢
var demo = 0;
function demo ()
demo() // demo is
not a function
答案是函式會先提公升,所以會產生error
Js 函式作用域和塊作用域
你不知道的js 第二版上捲第三章筆記 全域性作用域 定義在函式外部的變數,函式內部可以呼叫 區域性作用域 定義在函式內部的變數,函式外部不可以呼叫 塊級作用域 如同下面這個例子 for var i 1 i 10 i console.log i,b 輸出的還是 10 100!說明js沒有塊級作用域當我...
js 函式中的作用域和作用域鏈
js看似有 塊級作用域 其實它沒有,取而代之的是 函式作用域 在乙個 塊 一對花括號內 定義的變數在 塊外部是不可見的,且在 塊執行結束後被釋放掉。定義在該函式中的引數和變數在函式外部不可見 例子1 而乙個函式內部任何位置定義的變數,在該函式內部任何地方都可見 例子2 解釋二 也就是說,變數不僅在宣...
js函式中的作用域
js函式的中作用域基本劃分為兩種 1 全域性變數 2區域性區域性變數 出現原因 1在函式外宣告的 2沒有使用 var 函式內宣告的 1 遵循就近原則 2 區域性變數不適用var 直接賦值的會公升級為全域性變數,汙染作用域 3 區域性變數使用時,遵循變數提公升原則,即var 變數名會提公升到函式頂部,...