0 什么是JavaScript闭包?

当函数定义内部的函数被保存到外部时,就会形成闭包。闭包会导致作用域链不释放,造成内存泄漏。

1 获取局部变量

【练习目的】

  下面这个练习,是为了通过闭包实现获取定义在function内部的局部变量值。

【注意事项】

  最后a()函数返回的是b()的执行。因此在调用a()的时候,也即调用的是b()的执行。

  若a()返回的是b函数名,为了得到scope局部变量的值,对a的调用形式应为a()()。

【输出结果】

  ‘local’

【样例代码】

 var scope = 'global';
function a(){
var scope = 'local';
var b = function(){
return scope;
}
return b();
} console.log(a());

2 实现数组累加

【练习目的】

  下面这个练习,是为了通过闭包实现状态的保存,同时练习数组reduce方法。

【注意事项】

  注意reduce()的用法。 

【输出结果】

  28

【样例代码】

 function cumulate_sum(arr){
var sum = function(){
return arr.reduce(function(x , y){
return x + y;
});
}
return sum();
} console.log(cumulate_sum([1,2,3,4,5,6,7]));

3 实现点击相应位置输出对应序号

【练习目的】

  下面这个练习,实现了通过立即执行函数来实现值的保存。

【注意事项】

  如果不采用立即执行函数,则由于拷贝出来的i为最终的i值,输出会恒为5.

  此外需要注意鼠标点击事件的绑定方法addEventListener('click' , function(){})

  其中的第二个参数为回调函数。 

【输出结果】

  通过浏览器进行观察

【样例代码】

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Closure</title>
//编写盒子样式
<style>
*{
margin :0;
padding:0;
list-style: none;
}
li{
height:50px;
width: 300px;
border:1px solid #000;
text-align:center;
line-height: 50px;
color:#000;
margin:30px;
}
</style>
</head>
<body>
// 生成盒子
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<script>
var oLi = document.getElementsByTagName('li');
for(var i = 0 ; i < oLi.length ; i ++){
(function(i){
oLi[i].addEventListener('click' , function(){
console.log(i + 1);
})
})(i);
}
</script>
</body>
</html>

4 写在后面

  闭包是JavaScript中常用的实现方式,是学习过程的重点,此后还会对其应用的知识点进一步整理。

  明天考蓝桥杯了,祝自己好运!

JavaScript闭包应用的整理的更多相关文章

  1. 我也谈javascript闭包的原理理解

    参考原文:http://www.oschina.net/question/28_41112 前言:还是一篇入门文章.Javascript中有几个非常重要的语言特性——对象.原型继承.闭包.其中闭包 对 ...

  2. 《Web 前端面试指南》1、JavaScript 闭包深入浅出

    闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...

  3. JavaScript 闭包深入浅出

    闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...

  4. JavaScript闭包(Closure)

    JavaScript闭包(Closure) 本文收集了多本书里对JavaScript闭包(Closure)的解释,或许会对理解闭包有一定帮助. <你不知道的JavsScript> Java ...

  5. Javascript闭包和C#匿名函数对比分析

    C#中引入匿名函数,多少都是受到Javascript的闭包语法和面向函数编程语言的影响.人们发现,在表达式中直接编写函数代码是一种普遍存在的需求,这种语法将比那种必须在某个特定地方定义函数的方式灵活和 ...

  6. javascript闭包理解

    //闭包理解一 function superFun(){ var _super_a='a'; function subfuc(){ console.log(_super_a); } return su ...

  7. Javascript闭包深入解析及实现方法

    1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点:1. 作为一个函数变量的一个引用,当函数返回时 ...

  8. javascript闭包和作用域链

    最近在学习前端知识,看到javascript闭包这里总是云里雾里.于是翻阅了好多资料记录下来本人对闭包的理解. 首先,什么是闭包?看了各位大牛的定义和描述各式各样,我个人认为最容易一种说法: 外部函数 ...

  9. JavaScript闭包深入解析

    for (var i=1; i<=5; i++) { setTimeout( function timer() { console.log( i ); }, i*1000 ); } --上面这段 ...

随机推荐

  1. AjaxPro2完整入门教程

    一.目录 简单类型数据传送(介绍缓存,访问Session等) 表类型数据传送 数组类型数据传送(包含自定义类型数据) 二.环境搭建 1.这里本人用的是VS2012. 2.新建一个空的Web项目(.NE ...

  2. requests模块

    import requests url='https://www.cnblogs.com/Eva-J/p/7277026.html' get = requests.get(url) print(get ...

  3. JS第三部分--BOM浏览器对象模型

    一.client系列:宽高边框 二.offset系列:偏移 三.scroll系列 四.BOM的介绍 4.1.打开新窗口 4.2.location对象(本地信息对象) 4.3.history对象 4.4 ...

  4. Redis内存优化memory-optimization

    https://redis.io/topics/memory-optimization  官方文档 一.特殊编码: 自从Redis 2.2之后,很多数据类型都可以通过特殊编码的方式来进行存储空间的优化 ...

  5. kernel笔记——网络收发包流程

    本文将介绍网络连接建立的过程.收发包流程,以及其中应用层.tcp层.ip层.设备层和驱动层各层发挥的作用. 应用层 对于使用socket进行网络连接的服务器端程序,我们会先调用socket函数创建一个 ...

  6. echarts堆叠图添加总量

    echarts在使用中往往会遇到需要展示总量信息的情况,比较典型的就是3维统计的堆叠柱状图 堆叠是在柱状图的基础上,给几项设置同一stack来实现的.不考虑在tips中实现总和,有两种方式可以实现总和 ...

  7. c++入门之函数指针和函数对象

    函数指针可以方便我们调用函数,但采用函数对象,更能体现c++面向对象的程序特性.函数对象的本质:()运算符的重载.我们通过一段代码来感受函数指针和函数对象的使用: int AddFunc(int a, ...

  8. jQuery实现单击某个标签改变样式

    1.HTML代码,如下图: <p class="sc_member_recharge_form"> <span class="selected" ...

  9. winform,同个程序只允许启动一次

    static class Program { [DllImport("User32.dll")] private static extern bool ShowWindowAsyn ...

  10. mac用BootCamp装windows装完之后驱动问题

    刚装完会有一个临时盘里面找到BootCamp文件夹然后运行setup.exe,装完即可.