JavaScript?? ? ??? ?? ?? ??? ?? ??? ?????. ?? ??? ?? ?? ?? ??(?: ??, ????)? ?? ?? ????.
??? function
???? ? ??? ?? ?? ??? ??? ?? ??? ??? ??? ???? ? ????.
??? 16
,因?yàn)楹瘮?shù) bar
閉包了參數(shù) x
和變量 tmp
,它們都存在于外部函數(shù) foo
? ?? ??? ?????.
?? bar
與其與函數(shù) foo
? ?? ??? ?? ???? ???? ?????.
??? ???? ???? ?? return ? ??? ?? ????. ????? ? ??? ???? ?? ??? ???? ???? ?????.
? ??? ? ?? ??? ????? ???? ???? bar
中的代碼仍然可以引用參數(shù) x
和變量 tmp
??? 16? ?????.
??? tmp
仍然存在于 bar
的閉包中,它可以被遞增。每次調(diào)用 bar
??? ?? ?????.
???? ?? ??? ?? ??? ????.
JavaScript ??? ???? ??? ?? ????? ???? ec
。除了函數(shù)參數(shù)和目標(biāo)對(duì)象之外,該執(zhí)行上下文還接收到調(diào)用執(zhí)行上下文的詞法環(huán)境的鏈接,這意味著在外部詞法環(huán)境中聲明的變量(在上面的示例中,即 a
和 b
)可以從 ec
? ??? ??????.
?? ???? ?? ?? ??? ?? ??? ???? ?? ??? ???? ?????.
???? ??? ?? ???? ?? ?? ???? ?? ?????.
???? ??? ??? ?????.
??? ??? ?? ?? ????(?? ???)? ???? ???(?: ?? ?? ??)? ? ?? ?????.
JavaScript? ?? ??? ?? ?? ??? ?? ??? ?????. ? ??? ??? ??? ? ???? ?? ????? ???? ? ?????. ? ??? ???? ??? ???? ??? ??? ???? ?? ??? ???? ?? ??? ??? ??? "?" ? ????.
?? ???? ??? ???? ?? ?? ??? ?? ??? ??? ?????. ? ??? ?? ????? ???.
?? ???? inner
與調(diào)用foo
時(shí)創(chuàng)建的執(zhí)行上下文的詞法環(huán)境形成了閉包,閉包包含變量secret
: