函式作用域及作用域鏈

2022-09-13 03:36:16 字數 1054 閱讀 8768

變數作用域

全域性作用域

在j**ascript中全域性變數的作用域比較簡單,它的作用域是全域性的,在**的任何地方都是有定義的。然而函式的引數和區域性變數只在函式體內有定義

1.函式外面定義的變數擁有全域性作用域

var n =2;

function

fn()

console.log(fn())//1

console.log(n)//

2 console.log(a)//

報錯 error

2未定義直接賦值的變數自動宣告為擁有全域性作用域

var n =2;

function

fn()

console.log(fn())//1

console.log(n)//

2 console.log(a)//

1

3.window物件的屬性擁有全域性作用

區域性作用域一般只在固定的**片段內可訪問到,最常見的例如函式內部,所以在一些地方會把這種作用域成為函式作用域。

圖一中,a是函式內部宣告並賦值,擁有區域性作用域,只能帶函式fn內部使用,在fn外部使用就會報錯,這就是區域性作用域的特性,外部無法訪問。

3es6的塊級作用域

es5只有全域性作用域和函式作用域,沒有塊級作用域,會帶來下面問題:

es6引入了塊級作用域,明確允許在塊級作用域中宣告函式,let和const命令都涉及塊級作用域。

函式的作用域實際上是個動態概念 只有函式呼叫時,才會在記憶體中動態開闢乙個自己的作用域,函式呼叫完了這個作用域又關閉了,函式執行過程中在記憶體建立的資料又被清除了

通俗地講,當宣告乙個函式時,區域性作用域一級一級向上包起來,就是作用域鏈。

1.當執行函式時,總是先從函式內部找尋區域性變數

2.如果內部找不到(函式的區域性作用域沒有),則會向建立函式的作用域(宣告函式的作用域)尋找,依次向上

函式作用域和作用域鏈

所謂作用域就是 變數在宣告它們的函式體以及這個函式體巢狀的任意函式體內都是有定義的。function scope while 1 function console.log foo,global a,i m if b,i m while c c is not defined scope 但是,在js中...

作用域 作用域鏈

理解 就是一塊 地盤 乙個 段所在的區域 它是靜態的 相對於上下文物件 在編寫 時就確定了 分類全域性作用域 函式作用域 沒有塊作用域 es6有了 作用隔離變數,不同作用域下同名變數不會有衝突 區別1全域性作用域之外,每個函式都會建立自己的作用域,作用域在函式定義時就已經確定了。而不是在函式呼叫時 ...

作用域,變數作用域,作用域鏈知識

第2章 變數作用域 第3章 作用域鏈 預覽 1.全域性作用域 整個script標籤下 或者是單獨的js檔案 外部js 2.區域性作用域也叫 函式作用域 在函式內部就是區域性作用域 這個 的名字 變數 只在函式內部起作用和效果 3.不同作用域下,定義相同變數名是不衝突的。如果是在同一作用域宣告2個相同...