【发布时间】:2017-02-08 15:27:10
【问题描述】:
我正在阅读 this resource,试图了解闭包在 Javascript 中的工作原理。
我了解到,每次在其正常词法范围之外调用函数时,它都会创建闭包,从而能够访问封闭的函数变量并使用它们来存储状态。
这在下面的my_module.incrCounter(); 中有效(不断增加计数器),但是为什么它在my_module.incrLocalCounter(); 中不起作用,每次都返回1?
incrLocalCounter 内部的 IIFE 不应该在 local_counter 上创建闭包吗?
var my_module = (function tlModule(){
var counter = 0;
function incrCounter(){
counter++
console.log(counter);
};
function incrLocalCounter(){
var local_counter = 0;
(function () {
local_counter++
console.log(local_counter)
})();
};
return {
incrCounter: incrCounter,
incrLocalCounter: incrLocalCounter
}
})();
【问题讨论】:
-
每次在其正常词法范围之外调用函数时,它都会创建闭包——这并不正确。函数调用本质上总是会创建一个闭包,尽管在许多情况下闭包是空的。
标签: javascript