Learning to Love JavaScriptを見ていると、この2番目のバージョンが機能しない理由に夢中になりました。'function'を返すだけです。クロージャに変数を直接割り当てることは許可されていませんか?
function getCtr() {
var i = 0;
return function() {
console.log(++i);
}
}
var ctr = getCtr();
ctr();
ctr();
ctr();
/* console
1
2
3
*/
/*--------------------------------------
* This doesn't work
*/
var ctr = function() {
var i = 0;
return function() {
console.log(++i);
}
}
ctr();
ctr();
ctr();
/* console
* => [Function]
*/