【发布时间】:2015-08-21 14:01:01
【问题描述】:
我正在使用闭包,我来到了这段代码:
doit = true;
aww = function() {
if(doit) {var foo; doit = false;} else {}
foo = 0; foo += 1; return foo;
}
doit 是一个变量,aww 函数使用它只定义/删除foo 一次。
当我第一次执行aww 时,它将foo 作为一个局部变量(并设置为在以后的调用中不声明它)然后将foo 分配给0 并将其增加1。然后返回它(1)
我希望,下次我调用aww 时,foo 变量不会首先声明,因此aww 函数应该首先创建foo 并使其全局,因为它还没有被声明,它被分配给 0 之前没有任何 var。但真正发生的事情与我的预期不同。foo 不会成为全球性的,它仍然是本地的。
假设函数执行结束后函数的作用域仍然存在,这是真的吗?
或者,如果不是,是否只有 本地声明的变量列表 保存在某处?
我读过关于闭包的文章,但并不完全理解它们。这个问题的答案让我比以前更清楚了。谢谢。
【问题讨论】:
-
假设即使这样的列表也会存储在某个地方是不安全的,在某些情况下它可能是过早的优化。总的来说,每次调用函数时,函数体都是独立执行的。如果您想使用一些静态属性,请将其放在上层范围内(或扩充函数本身 - 毕竟它是一个对象)。
标签: javascript closures