JavaScript闭包的简单应用


Posted in Javascript onSeptember 01, 2017

闭包定义

在JavaScript中,当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包。简单说,闭包就是能够读取其他函数内部变量的函数。

闭包的作用:

1. 可以读取函数内部的变量
2. 让这些变量的值始终保持在内存中。
闭包简单应用

例一:

function a() { 
  var i = 0; 
 function b() {
  console.log(++i);
 } 
 return b;
}      
var c = a();  //执行完var c=a()后,变量c指向了函数b,再执行c()后就会显示i的值(为1)。
c();    //输出1

例二:

(function() { 
var i = 0; 
 return function(){
   console.log(++i);
  }
})()();     //输出1

例三:

(function(i) { 
 return function(){
   console.log(++i);
  }
})(0)();     //输出1

例四:

for (var i = 0; i < 3; i++) {
 setTimeout((function(i) {    
  return function() {
   console.log(i);
  };
 })(i), 2000);
 console.log(i+10);
}      //输出 10 11 12 (隔两秒后)0 1 2

例五:

for (var i = 0; i < 3; i++) {
 setTimeout((function(i) {
  return function() {
   console.log(i);
  };
 })(i)(), 2000);
 console.log(i+10);
}      //立即输出 0 10 1 11 2 12 ,(两秒后运行程序结束)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
减少访问DOM的次数提升javascript性能
Feb 24 Javascript
JavaScript实现点击文字切换登录窗口的方法
May 11 Javascript
js实现点击链接后延迟3秒再跳转的方法
Jun 05 Javascript
jQuery判断浏览器并动态调整select宽度的方法
Mar 02 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
Apr 14 Javascript
babel基本使用详解
Feb 17 Javascript
浅谈在Vue-cli里基于axios封装复用请求
Nov 06 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
Jan 15 Javascript
JS设计模式之策略模式概念与用法分析
Feb 05 Javascript
js prototype深入理解及应用实例分析
Nov 25 Javascript
Jquery高级应用Deferred对象原理及使用实例
May 28 jQuery
vue组件添加事件@click.native操作
Oct 30 Javascript
写给vue新手们的vue渲染页面教程
Sep 01 #Javascript
深入理解Vue 的条件渲染和列表渲染
Sep 01 #Javascript
js禁止Backspace键使浏览器后退的实现方法
Sep 01 #Javascript
JavaScript中数组常见操作技巧
Sep 01 #Javascript
js禁止浏览器页面后退功能的实例(推荐)
Sep 01 #Javascript
使用JS和canvas实现gif动图的停止和播放代码
Sep 01 #Javascript
关于Promise 异步编程的实例讲解
Sep 01 #Javascript
You might like
8个必备的PHP功能开发
2015/10/02 PHP
总结PHP中DateTime的常用方法
2016/08/11 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
JavaScript 常用函数
2009/12/30 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
2017/06/20 jQuery
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
[05:24]TI9采访——教练
2019/08/24 DOTA
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
深入解析Python中的WSGI接口
2015/05/11 Python
详解Python的Django框架中的中间件
2015/07/24 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
python写入已存在的excel数据实例
2018/05/03 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
python aiohttp的使用详解
2019/06/20 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
《狼和小羊》教学反思
2014/04/20 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
店铺转让协议书
2015/01/29 职场文书
MySQL通过binlog恢复数据
2021/05/27 MySQL
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis