什么是閉包烫罩?
當(dāng)一個(gè)內(nèi)部函數(shù)被其外部函數(shù)之外的變量引用時(shí)耘戚,就形成了一個(gè)閉包。
閉包這名字起得有點(diǎn)奇怪啊饿这。
如下面例子
數(shù)A的內(nèi)部函數(shù)B被函數(shù)A外的一個(gè)變量 c 引用撞秋。變量c是在outer function的外面,然后調(diào)用了A串结,而調(diào)用A A又要調(diào)用B舅列。相當(dāng)于c用了B(B是一個(gè)內(nèi)部函數(shù))。把敞。就這么繞
舉個(gè)例子
function A()
{
function B()
{
console.log("hello,world")
}//inner function over here
return B;
}//outer function over here
var c=A();
c();//hello word;
也可以這么寫
function A()
{
function B()
{
console.log("hello,world")
};
return B
}
A()();//hello,world
還可以這么寫
function A()
{
return function B()
{
console.log("hello,world")
}();
}
A();//hello,world
但是不能這么寫
function A()
{
function B()
{
console.log("hello,world")
}();
return B
}()
A();
這里的關(guān)鍵是理解return B是啥意思奋早。
如果是
function A()
{
function B()
{
console.log("hello,world")
};
return B
}
A();
那么結(jié)果是
image.png
返回函數(shù)本身耽装。
總結(jié)
如果返回的是一個(gè)函數(shù),那么調(diào)用的時(shí)候一定注意不能只調(diào)用外層规个,兩層都要調(diào)用挥萌。