【发布时间】:2009-11-23 10:29:21
【问题描述】:
我的问题更多是关于 JavaScript 的作用域,而不是闭包。
让我们看下面的代码:
var f = function () {
var n = 0;
return function () {
return n++;
};
}();
console.log(f());
console.log(f());
以上代码输出:
0
1
从上面的代码可以看出,f(自调用)返回一个函数,创建了n的闭包。
因此,它可以与匿名函数一起使用;因此,然后我用一个命名函数尝试了它:
var f2 = function () {
return n++;
};
var f = function () {
var n = 0;
return f2;
}();
console.log(f2()); // <= [n is not defined]
上面的代码不起作用,错误为n is not defined。我认为这是一个范围界定问题;但我不知道究竟是为什么;
为什么作用域与匿名的内部函数相同,但不适用于命名的外部函数?
另外,在第二个例子中,我是在创建一个闭包吗?
【问题讨论】:
标签: javascript function scope function-pointers closures