閉包的形成: 函式和周圍的狀態(詞法環境) 的引用**在一起 形成了閉包
閉包可以在乙個作用域中呼叫乙個函式的內部函式並訪問該函式的作用域中的成員
簡單的理解就是將外部函式的內部成員的作用域延長了,這裡需要補充乙個小知識:
函式在執行的時候會放入乙個執行棧上,當函式執行完之後從執行棧上移除
但是閉包發生的時候,在堆上的作用域成員,因為被外部引用不能釋放,因此函式依然可以訪問外部函式的成員
看如下按,這是乙個閉包的簡單應用
// 函式作為返回值
function
makefn()
}
實現原理在於外部函式 makefn的內部成員 msg的作用範圍延長了
接下來通過 chrome 的devtool 來觀察一下閉包的發生過程
我們在49行打上乙個斷點 ,注意觀察右側的執行棧和作用域 ,然後開始逐步除錯
執行開始,將makefn函式推入執行棧,看作用域 this 指向window ,msg 的變數宣告提公升,並賦值undefined
繼續往下執行: 給msg 賦值
發現乙個返回值,是乙個函式
繼續往下執行兩步,進入到返回的函式內部 ,closure就是閉包同時閉包裡存了msg
繼續往下執行,就會輸出msg 的內容,發現在closure出現的時候,也就是閉包發生的時候,msg並沒有被釋放,所以仍然可以訪問
舉幾個閉包的例子
// once
function
once
(fn)}}
let print =
once
(function
(msg)
)// print("666")
// print("666")
// print("666")
// print("666")
// 延長了外部函式的內部成員的作用範圍
// 計算底數的幾次冪
function
makepow
(exponent)
}// console.log(makepow(2)(2))
// 閉包累加器
function
add()}
// var myadd = add()
// myadd()
// myadd()
// myadd()
// myadd()
python的單步除錯工具pdb
方法一 執行 python m pdb pythonname.py pdb 會自動停在第一行,等待除錯,這時你可以看看 幫助 pdb h 說明下這幾個關鍵 命令 斷點設定 pdb b 10 斷點設定在本py的第10行 或 pdb b ots.py 20 斷點設定到 ots.py第20行 刪除斷點 p...
js除錯工具Console命令詳解
一 顯示資訊的命令 複製 如下 最常用的就是console.log了。二 佔位符 console上述的集中度支援printf的佔位符格式,支援的佔位符有 字元 s 整數 d或 i 浮點數 f 和物件 o 複製 如下 效果 三 資訊分組 複製 如下 效果 四 檢視物件的資訊 console.dir 可...
js除錯工具Console命令詳解
出處 這篇文章主要介紹了js除錯工具console命令詳解,需要的朋友可以參考下 一 顯示資訊的命令 複製 如下 最常用的就是console.log了。二 佔位符 console上述的集中度支援printf的佔位符格式,支援的佔位符有 字元 s 整數 d或 i 浮點數 f 和物件 o 複製 如下 效...