很多關於JS的書籍例如《JavaScript權威指南》或《高程》都把閉包解釋的晦澀難懂,萌新們是怎麼也看不懂啊!不過別怕,今天我就用很簡單的方式跟大家講解下到底什麼是閉包。這是一篇面對新手的對於閉包的解釋,沒有晦澀生硬的語句,一看就能明白。如有不妥歡迎指正!
要理解閉包,首先要理解變數的作用域。
JS中變數作用域有兩個:全域變數以及局部變量,顧名思義,全域變數就是在任何位置都可以引用的變量,局部變數就是只能在特定位置才能引用的變量,看下面程式碼。
var globalScope="global scope"; function f(){ var localScope="local scope"; console.log(globalScope);//global scope } console.log(localScope);//undefined
在函數f()內可以存取到函數體外定義的globalScope,而函數體外無法存取函數體內定義的localScope,這就是全域變數與局部變數的差異。
難道在函數體外就永遠訪問不到localScope了嗎?非也,閉包就是為此而生。
function f(){ var localScope="local scope"; return function(){ console.log(localScope); } } f()();//local scope
我們在函數f()外訪問到了局部變數localScope,這裡在函數f()內定義的匿名函數就是一個閉包!