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. Git 最佳实践:分支管理

    5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践.最后我为团队选择了这个git分支管理实践 A successful Git branching ...

  2. c/c++ 拷贝控制 右值与const引用

    拷贝控制 右值与const引用 背景:当一个函数的返回值是自定义类型时,调用侧用什么类型接收?? 1,如果自定义类型的拷贝构造函数的参数用const修饰了:可以用下面的方式接收. Test t2 = ...

  3. iOS 限制TextField输入长度(支持删除)

    if (textField == _phoneTF) { //支持删除 && ) { return YES; } ) { _phoneTF.text = [textField.text ...

  4. Linux(Deepin 15.9) - MySQL5.7 安装

    Linux(Deepin 15.9) - MySQL5.7 安装 sudo apt install mysql-server/panda sudo apt install mysql-client/p ...

  5. SQLServer之创建事务未提交读

    未提交读注意事项 使用 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 指定会话的锁定级别. 一次只能设置一个隔离级别选项,而且设置的选项将一直对那个 ...

  6. LeetCode算法题-Range Addition II(Java实现)

    这是悦乐书的第271次更新,第285篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第138题(顺位题号是598).给定一个m行n列的新二维数组M,其初始值为0.提供一个二 ...

  7. 初步了解.net

    一..net和C#是什么关系 .net是一个程序运行的平台,它是c#,vb,F#等程序运行的平台,为这些语言提供基础类库.公共语言运行时(CLR)等相关支持. C#是支持.net的一种编程语言..ne ...

  8. (四)Exploring Your Cluster

    The REST API Now that we have our node (and cluster) up and running, the next step is to understand ...

  9. 环境配置 mac安装bazel

    brew cask install homebrew/cask-versions/java8 brew install bazel

  10. SpringCloud(7)服务链路追踪Spring Cloud Sleuth

    1.简介 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可.本文主要讲述服务追踪组件zipki ...