立即執(zhí)行函數(shù)
- 我們不想用全局函數(shù)
- 我們要使用局部變量
- ES5里只有函數(shù)有局部變量
- 于是我們聲明一個(gè)
function xxx(){}然后.call() - 這個(gè)時(shí)候xxx是全局變量(全局函數(shù))
- 所以我們不能給這個(gè)函數(shù)名字
- function(){}.call()
- 但是chrome會(huì)報(bào)錯(cuò),語法錯(cuò)誤
- 試出一種方法可以不報(bào)錯(cuò)
-
!function(){}.call()(我們不在乎這個(gè)匿名函數(shù)的返回值,所以加個(gè)!取反沒關(guān)系)
-
閉包和立即執(zhí)行函數(shù)的聯(lián)合使用
- 立即執(zhí)行函數(shù)使得person無法被外部訪問
- 閉包使得匿名函數(shù)可以操作person
- window.frankGrowUp 保存了匿名函數(shù)的地址
- 任何地方都可以使用window.frankGrowUp
推論:任何地方都可以使用window.frankGrowUp操作person,但是不能直接訪問person

閉包

函數(shù)