js闭包理解与使用场景
要理解闭包首先要知道什么是函数的作用域链
因为有函数的作用域链存在,所以函数无论在哪里调用,函数都可以使用函数外部作用域的变量。
当一个函数被调用时,会创建一个执行环境及相应的作用域链。然后使用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));
js闭包理解与使用场景的更多相关文章
- js闭包理解实例小结
Js闭包 闭包前要了解的知识 1. 函数作用域 (1).Js语言特殊之处在于函数内部可以直接读取全局变量 <script type="text/javascript"> ...
- js闭包理解
js闭包的作用是使函数外可以访问函数内部的变量,是通过 在函数内部 定义 访问函数内变量 的函数实现的,内部的一个函数产生一个闭包 function a() { var i=0; return fun ...
- 理解js闭包9大使用场景
1.返回值(最常用) //1.返回值 最常用的 function fn(){ var name="hello"; return function(){ return name; } ...
- javascript之闭包理解以及应用场景
半个月没写博文了,最近一直在弄小程序,感觉也没啥好写的. 之前读了js权威指南,也写了篇博文,但是实话实说当初看闭包确实还是一头雾水.现在时隔一个多月(当然这一段时间还是一直有在看闭包的相关知识)理解 ...
- js闭包理解案例-解决for循环为元素注册事件的问题
转发自http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html 一.变量的作用域 要理解闭包,首 ...
- JS闭包理解_摘
原文地址1:http://www.cnblogs.com/mzwr1982/archive/2012/05/20/2509295.html 闭包是一个比较抽象的概念,尤其是对js新手来说.书上的解释实 ...
- JS闭包,以及适用场景
闭包的定义 不用解释了,网上到处都是.简单的说:一个定义在函数内部的函数与包含它的外部函数构成了闭包,内部函数可以访问外部函数的变量,这些变量将一直保存在内存中,直到无法再引用这个内部函数 举个例子: ...
- js 闭包 理解 copy
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于Javascript初学者应该是很有用的. 一.变量的作用域 要理解 ...
- js 闭包 理解
1.什么是闭包 定义:是指有权访问另一个函数作用域中的变量的函数 创建闭包:在一个函数内部创建另一个函数 基本特点 在返回的匿名函数中 可以调用外部函数的变量 如下例中所示 内部函数(匿名函数) 可以 ...
随机推荐
- Django 数据库同步命令
版本1.8.2 检查数据库配置是否有错 Python manage.py validate/check 创建对应书看的映射语句 Python manage.py makemigrations 同步或者 ...
- Qt Quick 基本元素初体验
Qt Quick 作为 QML 语言的标准库,提供了很多基本元素和控件来帮助我们构建 Qt Quick 应用,这节我们简要地介绍一些 Qt Quick 元素. 一. 基本可视化项 1.1 Item I ...
- SpringBoot第三篇:配置文件详解二
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10615605.html 版权声明:本文为博主原创文章,转载请附上博文链接! 前言 本文主要讲 ...
- 修咻咻对追光的人、云打印团队的Beta产品测试报告
修咻咻对追光的人.云打印团队的Beta产品测试报告 作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Beta冲刺(团队) 团队目标 切实可行的计算机协会维修预约平 ...
- 集合类源码(三)Collection之List(CopyOnWriteArrayList, Stack)
CopyOnWriteArrayList 功能 全名 public class CopyOnWriteArrayList<E> implements List<E>, Rand ...
- day05——字典
day05 字典 字典-- dict: 字典无序的,可变的数据类型 用于存储大量数据,字典要比列表快,将数据和数据之间进行关联 lst1 = ['常鑫','李文虎','张宇'] # 姓名 lst2 = ...
- python实现ldap接入
需要提前安装python-ldap模块 python接入ldap其实分了几个步骤: 1.使用一个管理员账户登陆到ldap 2.使用一个字段值是唯一的字段,去搜索到要验证用户的DN值(ldap搜索到的单 ...
- mysql时间戳转日期
-- 日期字符串转时间戳,10位,数据库存储的是13位 select UNIX_TIMESTAMP('2019-09-01 00:00:00'); -- 时间戳转日期 ,'%Y-%m-%d %H:%i ...
- 安全漏洞系列(二)---站点信息侦测(C# MVC)
参考地址:https://jingyan.baidu.com/article/77b8dc7fa657c26174eab631.html 概述:站点信息侦测漏洞会检测到用的版本信息等,然后借此进行一些 ...
- 【python+selenium学习】Python常见错误之:IndentationError: unexpected indent
初入python+selenium学习之路,总会遇到这样那样的问题.IndentationError: unexpected indent,这个坑我已经踏进数次了,索性记录下来.都知道Python对代 ...