js 闭包的用法详解
一、闭包
实现可重用的局部变量,且保护其不受污染的机制。
- 外层函数包裹受保护的变量和内层函数。
- 内层函数专门负责操作外层函数的局部变量。
- 将内层函数返回到外层函数外部,反复调用。
二、作用域
子函数会一级一级地向上寻找所有父函数的变量。所以,父函数的所有变量,对子函数都是可见的,反之则不成立。
三、函数调用
- 外层函数调用了几次,就有几个受保护的局部变量副本。
- 同一次外层函数调用返回的多个内层函数,共同用一个局部变量。
- 闭包的局部变量不能释放。
- 尽量不要在定时器中使用闭包。因为闭包的外层函数定义的变量不能释放,但是定时器使用中需要释放。
四、内层函数使用不同变量的实例详解
1、内层函数使用自己的变量
内层函数使用自己的变量,调用完后,直接释放。
function outerFun(){
function innerFun(){
var innerVar = ;
innerVar++;
alert(innerVar);
}
return innerFun;
}
var globVar1 = outerFun();
globVar1(); // Alert 1
globVar1(); // Alert 1
var innerVar2 = outerFun();
innerVar2(); // Alert 1
innerVar2(); // Alert 1
2、内层函数使用全局变量
全局变量释放,是在所有代码运行完成后。
var globVar = ;
function outerFun(){
function innerFun(){
globVar++;
alert(globVar);
}
return innerFun;
}
var globVar1 = outerFun();
globVar1(); // Alert 1
globVar1(); // Alert 2
var globVar2 = outerFun();
globVar2(); // Alert 3
globVar2(); // Alert 4
3、内层函数使用外层函数变量(闭包)
- 外层函数调用几次就有几个被保护的局部变量副本。
- 闭包的局部变量不被释放。
function outerFun(){
var outerVar = ;
function innerFun(){
outerVar++;
alert(outerVar);
}
return innerFun;
}
var globVar = outerFun();
globVar(); // Alert 1
globVar(); // Alert 2
var globVar2 = outerFun();
globVar2(); // Alert 1
globVar2(); // Alert 2
js 闭包的用法详解的更多相关文章
- js闭包的用途详解
js闭包可以用在许多地方.它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中 我们来看看闭包的用途.事实上,通过使用闭包,我们可以做很多事情.比如模拟 ...
- js中reduce用法详解
介绍reduce reduce() 方法接收一个函数作为累加器,reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(上一次回调的返回值),当 ...
- js replace 与replaceall实例用法详解
这篇文章介绍了js replace 与replaceall实例用法详解,有需要的朋友可以参考一下stringObj.replace(rgExp, replaceText) 参数 stringObj 必 ...
- js数组中foEach和map的用法详解 jq中的$.each和$.map
数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...
- JS逗号运算符的用法详解
逗号运算符的用法详解 注意: 一.由于目前正在功读JavaScript技术,所以这里拿JavaScript为例.你可以自己在PHP中试试. 二.JavaScript语法比较复杂,因此拿JavaScri ...
- js原生之scrollTop、offsetHeight和offsetTop等属性用法详解
scrollTop.offsetHeight和offsetTop等属性用法详解:标题中的几个相关相关属性在网页中有这大量的应用,尤其是在运动框架中,但是由于有些属性相互之间的概念比较混杂或者浏览器兼容 ...
- AngularJS select中ngOptions用法详解
AngularJS select中ngOptions用法详解 一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...
- window.onload用法详解:
网页中的javaScript脚本代码往往需要在文档加载完成后才能够去执行,否则可能导致无法获取对象的情况,为了避免这种情况的发生,可以使用以下两种方式: 一.将脚本代码放在网页的底端,这样在运行脚本代 ...
- 【Ext.Net学习笔记】03:Ext.Net DirectEvents用法详解、DirectMethods用法详解
Ext.Net通过DirectEvents进行服务器端异步的事件处理.[Ext.Net学习笔记]02:Ext.Net用法概览.Ext.Net MessageBus用法.Ext.Net布局 中已经简单的 ...
随机推荐
- solr6.5.0版本(Windows安装图解)
此教程为solr6.5.0安装,自己制作,希望可以帮到你们.
- Python Django CMDB项目实战之-2创建APP、建模(models.py)、数据库同步、高级URL、前端页面展示数据库中数据
基于之前的项目代码来编写 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页index页文章页面 现在我们修改一个文章列表是从数据库中获取数据, 下面我们就需 ...
- EasyUI实现异步载入tree(整合Struts2)
首先jsp页面有一ul用于展现Tree <ul id="mytree"></ul> 载入Tree <script type="text/ja ...
- SSH Secure Shell显示serverTomcat后台内容
作为linux小白,仅仅有学一点记一点了: 部署server的时候.常常须要向本地一样查看控制台输出,在linux上能够通过查看日志输出替代,当然也能够通过命令让日志实时显示在命令窗体,这对用惯了wi ...
- eclipse 鲜为人知的调试技巧,你用过多少
今天在OSChina上看到了篇调试技巧,的确对于调试非常有帮助,而且大部分我们都没实用过,我们常常使用的调试是F5678四个键,假设你还想提高调试效率你能够尝试着用一用,写过代码做过项目的人都知道调试 ...
- 解决IOS微信内置浏览器返回后不执行js脚本的问题
在A页面写一个$(function(){}) 后随便点击一个URL跳转到B页面 利用微信内置浏览器 返回键返回到A页面后发现这段JS不执行,后来找到了解决方案 $(function () { var ...
- 让你用sublime写出最完美的python代码--windows环境
至少很长一段时间内,我个人用的一直是pycharm,也感觉挺好用的,也没啥大毛病 但是pycharm确实有点笨重,啥功能都有,但是有很多可能这辈子我也不会用到,并且pycharm打开的速度确实不敢恭维 ...
- 《C++程序设计语言(英文第四版)》【PDF】下载
<C++程序设计语言(英文第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382177 内容简介 本书是C++领域经典的参 ...
- 52、css属性操作
前面说的主要是css的使用规则和选择器等,这篇主要讲解css的具体使用. 一.css text 1.文本颜色:color 颜色属性被用来设置文字的颜色. 颜色是通过CSS最经常的指定: 1)十六进制值 ...
- 【java API基本实现】ArrayList
ArrayList: package com.tn.arraylist; public class ArrayList { Object[] objects=new Object[10]; int i ...