javascript - 首选哪种 Javascript 闭包场景?
问题描述
在什么情况下 counter1 更可取?在什么情况下计数器 2 会更好?
我知道在全局声明变量时可能无法预测,但是有没有一种情况比在函数内声明它更可取?
// counter1 code
function counterMaker() {
let count = 0;
return function counter() {
return count++;
};
}
// counter2 code
let count = 10;
function counter2() {
return count++;
}
解决方案
计数器 1 代码的说明。
// counter1 code
function counterMaker() {
let count = 0;
return function counter() {
return count++;
};
}
在这里,您将一个函数返回给调用者。所以可以在调用者处做这样的事情。
var c = counterMaker()
c() //0
c() //1
c() //1
var b = counterMaker()
b() //0
b() //1
b() //1
因为您在尝试使用函数表达式时尝试封闭该函数和变量环境。所以你的增量功能不会暴露在外面。如果这是有道理的,那么你就会明白为什么要关闭和在哪里关闭的全部简洁性。
代码2的解释
// counter2 code
let count = 10;
function counter2() {
return count++;
}
您正在尝试将增量函数公开到全局中,现在您将无法像上面的代码 1 那样创建多个实例。因此,每次调用函数 counter2 时,它只会增加什么。
推荐阅读
- powershell - tree /f cmd 修改日期。Windows PowerShell
- angularjs - 在控制器/指令之间传递数据
- powershell - 在保持文件夹结构的同时复制 PDF
- java - 如何使用文本创建对象
- erlang - Erlang:类型 ref() 未定义
- android - Localdatetime 到 epoch/calendar.getTimeInMillis() for alarmmanager
- ios - 如何计算对象数组中的键值总数
- powershell - 删除日志消息中不需要的字符
- php - Preg可靠地匹配字母和数字
- shiny - Shiny中如何控制程序的执行顺序