從作用域鏈學閉包

2021-09-11 14:01:51 字數 996 閱讀 8831

閉包

閉包是乙個能訪問外部函式定義的變數函式

為什麼?

當訪問乙個變數時,直譯器會首先在當前作用域查詢標示符,如果沒有找到,就去父作用域找,直到找到該變數的標示符或者不再存在父作用域了,這就是作用域鏈。

作用域鏈的頂端是全域性物件。

先來看看**

var color = 'blue'

function

getcolor

() getcolor() // 'blue'

複製**

var color = 'blue'

function

getcolor

() getcolor() // 'red'

複製**

再來看看另乙個demo

function createcounter(initial) 

function

get()

return ;

}var mycounter1 = createcounter(100);

var mycounter2 = createcounter(200);

mycounter1.get() // 100

mycounter2.get() // 200

mycounter1.increment(2);

mycounter2.increment(5);

mycounter1.get() // 102

mycounter2.get() // 205

複製**

mycounter1.get和mycounter2.get的函式物件擁有著一樣的**以及一樣的屬性值(name,length等等),但是它們的[[scope]]指向的是不一樣的作用域物件

作用域,閉包,作用域鏈

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

作用域 作用域鏈 閉包

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

作用域鏈 閉包

什麼是閉包?js語言的特點之一是 內部函式可以訪問全域性變數的值,而外部函式不能訪問內部變數的值。function test b test 輸出123反過來,如果a變數在函式b內部的話,test函式是訪問不到的。內層函式實際上可以訪問外部的所有變數的值,在函式內部取值的時候,優先從自己的函式塊中查詢...