答、簡單的說,作用域是針對變量的,比如我們創(chuàng)建一個(gè)函數(shù) a1,函數(shù)里面又包了一個(gè)子函數(shù)a2.此時(shí)就存在三個(gè)作用域:
全局作用域、a1作用域、a2作用域;即全局作用域包含了a1的作用域,a2的作用域包含了a1的作用域。
當(dāng)a1在查找變量的時(shí)候會(huì)先從自身的作用域區(qū)查找,找不到再到上一-級 a2的作用域查找,如果還沒找到就到全局作用域區(qū)查找,這樣就形成了一個(gè)作用域鏈。
理解閉包首先要理解,js 垃圾回收機(jī)制,也就是當(dāng)一個(gè)函數(shù)被執(zhí)行完后,其作用域會(huì)被收回,如果形成了閉包,執(zhí)行完后其作用域就不會(huì)被收回。
如果某個(gè)函數(shù)被他的父函數(shù)之外的一個(gè)變量引用,就會(huì)形成閉包。
閉包的作用,就是保存自己私有的變量,通過提供的接口(方法)給外部使用,但外部不能直[接訪問該變量.