任何在函數(shù)中定義的變量枣宫,都可以認為是私有變量,因為不能在函數(shù)的外部訪問這些變量 (變量的作用域)
1.當在函數(shù)內(nèi)部定義了其他函數(shù)時吃环,就創(chuàng)建了閉包也颤。 閉包是一個函數(shù),閉包會攜帶包含它的函數(shù)的作用域
例子:
a函數(shù)內(nèi)進行return 另一個b函數(shù)郁轻,被包含的b函數(shù)因為作用域鏈拿到了上級a函數(shù)作用域的私有變量翅娶,當在外部調(diào)用a函數(shù)并且執(zhí)行a函數(shù)的返回值b函數(shù)時,也就能在外部順利拿到了a函數(shù)中作用域的私有變量好唯。
當a函數(shù)執(zhí)行完后里面的活動對象不會銷毀竭沫,因為b函數(shù)還在引用a函數(shù)作用域上的活動對象。直到b函數(shù)銷毀后骑篙,里面的活動對象才被銷毀蜕提。
2.在后臺執(zhí)行環(huán)境中,閉包的作用域鏈包含著它自己的作用域靶端、包含函數(shù)的作用域和全局作用域谎势。
3.通常,函數(shù)的作用域及其所有變量都會在函數(shù)執(zhí)行結(jié)束后被銷毀杨名。
但是脏榆,當函數(shù)返回了一個閉包時,這個函數(shù)的作用域?qū)恢痹趦?nèi)存中保存到閉包不存在為止台谍。
閉包的作用:
1.可以使用自執(zhí)行函數(shù)與函數(shù)的結(jié)合全新的閉包作用域
2.生成全新的私有作用域,保護函數(shù)內(nèi)的變量安全须喂。使用閉包的私有作用域代替全局變量,防止全局污染
3.在es5可以隔離 for循環(huán)中的var i變量的作用域
4.在內(nèi)存中維持一個變量。