function b(){
var a=1;
function c(){
alert(a);
}
return c;
}
alert(b()());
我的理解是只彈一次,為什麼會有第二次undefined呢?
alert(b()());可以分成幾部分,根據優先級,alert內先解析括號內的,也就是b()()代碼,碰到b(),因為b是函數,後面跟(),就執行了function b,該方法返回
return c,返回了function c。於是返回的結果和後面的()結合,執行c函數。alert(a)彈出1,但沒有返回值,所以對於最外層alert來說就是undefined了。
這就是典型的閉包。
改成下面這樣就不出現undefined了。
function b(){
var a=1;
function c(){
alert(a);
return 'b';
}
return c;
}
alert(b()());