js闭包理解与使用场景
2024-09-06 21:00:22
要理解闭包首先要知道什么是函数的作用域链
因为有函数的作用域链存在,所以函数无论在哪里调用,函数都可以使用函数外部作用域的变量。
当一个函数被调用时,会创建一个执行环境及相应的作用域链。然后使用arguments和其他命名参数的值来初始化函数的活动对象。此活动对象在当前函数作用域链的第一位,外部函数的活动对象在作用域链的第二位,外部函数的外部函数的活动对象在第三位,直至作为作用域链终点的全局执行环境。
闭包的作用:
实现一个作用域,达到封装的目的,这样做的好处是隐藏私有变量,防止污染全局变量;
还可以实现缓存功能
案例1:隐藏私有变量 function pack() { var index; return function () { return index++; }; } var p = pack(); p(); 案例2:缓存 function createFab(n) {
var _cache = {};
return function (n) {
var result = 0;
if (_cache[n]) {
return _cache[n];
}
if (n === 1 || n === 2) {
result = 1;
}
else {
result = fab(n - 1) + fab(n - 2);
}
_cache[n] = result;
return result;
}
} var fab = createFab();
console.info(fab(6));
console.info(fab(6));
最新文章
- Lua学习笔记一
- java12 - 7 排序的案例
- Github排行榜
- JAVA定时执行任务的三种方法
- Java多线程 - 线程状态
- 2015英特尔® 实感™ (Intel® RealSense™) 动手开发实验课
- 对React的理解
- WCF - net.pipe vs. net.tcp vs. http Bindings
- android开发学习笔记:圆角的Button
- css样式float造成的浮动“塌陷”问题的解决办法
- 基于mapreducer的图算法
- django最简单表单入门
- STM32F4xx时钟理解
- 在vc正在使用xtremetoolkit接口库-----使用简单的控制
- redis内存占用说明
- 2017.3.3自测j纠错题.
- JSP执行过程分析
- 【django之admin,单例模式】
- Tsinghua 2018 DSA PA3简要题解
- 简单配置,让ES6脚本在浏览器里飞
热门文章
- Python-lambda使用
- Kubernetes 学习(十)Kubernetes 容器持久化存储
- No package python-pip available. 解决方法
- 【记录】【idea】【mysql】Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.解决问题
- POJ 1061 青蛙的约会 题解
- kubeadm安装kubernetes 1.16.2
- centos6.5 安装openresty
- Git的使用--如何安装和使用 github,让小白不在那么白 (一)(超详解)
- docke通信之Linux 网络命名空间
- 大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作【华为云技术分享】