作用域 閉包

2021-10-01 15:02:20 字數 1377 閱讀 3433

1. js執行順序

語法分析

預編譯 先生成go物件

1. 函式執行生成ao物件

2. 形參和變數作為ao物件的鍵名, 鍵值是undefined

3. 實參賦值給形參

4. 在函式中找到函式宣告,把函式作為ao物件的屬性名,屬性值為函式體

執行js**

作用域:變數作用範圍

1. 作用域:變數作用範圍

(1)函式作用域:只在函式內部起作用

(2)全域性作用域:全域性有效,不寫var預設全域性;

全域性物件儲存在全域性window中

2. 作用域鏈

查詢規則

function

outer()

inner()

;}outer()

;console.

log(a)

;// error

var a =1;

var b =2;

function

outer()

inner()

; console.

log(a)

;//3

console.

log(b)

;//2

}outer()

;console.

log(a)

;//1

console.

log(b)

;//2

3. 閉包

定義:乙個函式可以把它自己內部的語句,和自己宣告時所處的作用域一起封裝成了乙個密閉環境,我們稱為「閉包」。

優點:(1)函式外部可以讀取到函式內部的變數

(2)讓這些變數始終儲存在記憶體中

缺點:由於閉包會使得函式中的變數都儲存在記憶體中,記憶體消耗大,所以不能濫用閉包,否則會造成網頁效能問題,在ie中導致記憶體洩漏

閉包形成的條件:

(1)函式巢狀函式

(2)內部函式中使用了外部函式的變數

(3)內部函式被轉移到其他作用域被定義

function

outer()

return inner;

// 整個函式返回給outer

}var inn =

outer()

;inn()

;//33

複雜的閉包就是在函式內部再巢狀乙個函式

function

foo()}

var b =

foo();

console.

log(b(

));// 6

console.

log(b(

));// 7

作用域,閉包,作用域鏈

一,作用域 變數在宣告它的函式及該函式所巢狀的任意函式是有定義的 例var num 2 function fun fun 二,作用域鏈 多個函式巢狀在一起,多個作用域相互巢狀,這是作用域鏈 var num 1 function fun function fun2 fun1 fun2 fun 訪問原則...

作用域 作用域鏈 閉包

閉包概念中的一些專業名詞概念不清晰 作用域鏈 本質是乙個指向變數物件的指標列表。函式的作用域鏈在函式呼叫完成後即被銷毀。變數物件 全域性變數物件 js執行時一直存在 活動變數物件 區域性變數物件,函式執行完畢後銷毀 函式在呼叫時建立本地的活動物件加上函式定義時預建立的作用域鏈,形成乙個新的用於執行函...

作用域與閉包

執行上下文 範圍 一段或者乙個函式 全域性 變數定義 函式宣告 一段 函式 變數定義 函式宣告 this arguments 函式 ps 注意 函式宣告 和 函式表示式 的區別 console.log a var a 100 fn zhangsan function fn name this thi...