在js中作用域是什麼???
何為作用域
任何程式語言都有作用域的概念,簡單來說,作用域就是變數與函式的可訪問範圍,即作用域控制著變數與函式的可見性和生命週期。
js的作用域是靠函式來形成的,也就是說乙個函式的變數在函式外不可以訪問。
1全域性作用域也就是go
任何地方都能訪問到的物件擁有全域性作用域。
1.1函式外面定義的變數擁有全域性作用域
var a =10;
function
fun1()
console.
log(a)
;//這時候的a就是全域性變數
1.2未定義直接賦值的變數自動宣告為擁有全域性作用域
var a =10;
function
fun1()
console.
log(b)
;//這時候的b也就是全域性變數
3.window物件的屬性擁有全域性作用
2 區域性作用域 也就是ao
區域性作用域一般只在固定的**片段內可訪問到,最常見的例如函式內部,所以在一些地方會把這種作用域成為函式作用域。
var a =10;
function
fun1()
console.
log(b)
;//這時候的函式裡面的a , b 就是區域性變數
我們了解了 區域性和氣全域性, 那我們怎麼理解 go 和ao呢,我們用解釋一下它的過程!
main() 就是乙個起始,然後這時候我們的變數宣告就會提前,而他們的值就如圖 為unfdeined, 函式也會提上前
我舉乙個簡單的小例子 如圖中一樣
console.
log();
var a =10;
//這時候a的輸出結果為 undefined;
//以為 宣告變數會提前,這段**實際就是
var a ;
console.
log(a)
; a =10;
//這樣就很明顯可以看到為什麼是 undefined
go 就是 乙個全域性, 裡面的東西大家都可以呼叫,
ao就是函式裡面的 內容`
var a =
10function
fun(
)fun()
;
上面這段** a 就是乙個全域性變數 存在go中而b就存在函式fun() 的ao中 在fun的ao中沒有宣告變數 a 怎麼辦這個時候就會去全域性 go裡面去找 有我就拿過來用,所以這個時候 a的輸出就是20,
注意這裡的不好的地方 全域性變數 會被改變,所以盡量不要使用全域性變數
回到ao在 函式執行完畢後 ao就會消失, 我們上面**中的b 也會消失!
理解作用域鏈
先來看兩個例子 var x 10 bar 10 function foo function bar 解析 執行bar,相當於執行foo foo裡面要輸出x,我們首先要從foo自己的作用域下面去找 foo裡邊是沒有宣告x的,然後我們會到foo的詞法作用域去找,也就是宣告foo的作用域去找。在這裡foo...
理解作用域鏈和原型鏈
作用域鏈的概念 要理解es中作用域鏈,首先要從理解執行環境開始。es中 執行都是在乙個具體的執行環境中進行的,每個執行環境有乙個與之關聯的變數物件,該變數中包含著在這個執行環境中可以訪問的變數和函式。這裡所說的執行環境就相當於作用域。最外圍的執行環境是全域性環境,在web瀏覽器中也就是window物...
JS深入理解作用域 作用域鏈,變數提公升
1 作用域 1 全域性作用域 在瀏覽器載入我們html頁面的時候,首先會開闢乙個供js 執行的環境,即全域性作用域,這是乙個棧記憶體 2 私有作用域 函式執行時,開闢乙個新的棧記憶體,形成私有作用域 2 基本資料型別與引用資料型別區別?基本資料型別 string,number,boolean,nul...