闭包就是能够读取其他函数内部变量的函数。

在javascript中,只有函数内部的子函数可以读取局部变量,因此,我理解闭包就是定义在一个函数内部的函数。

例子:

var f1 = function() {
var n = 100;
var f2 = function() {
return n;
}
return f2();
}
var s = f1(); console.error(n + 1);

由于n是定义在f1内部的局部变量,因此外部的n是未定义的,会出错

var f1 = function() {
var n = 100;
var f2 = function() {
return n;
}
return f2();
}
var s = f1(); console.notice(s + 1);

通过闭包函数f2,局部变量n就可以在外部取到。

其实熟悉了以后,闭包就是匿名函数,然后被它的外部函数作为返回值传出来,就可以在外部取到局部变量了

闭包的作用除了前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

闭包不能乱用,因为其变量一直保持在内存中,因此内存消耗会比较大。

关于javascript中闭包的理解的更多相关文章

  1. 对JavaScript中闭包的理解

    在前端开发中闭包是一个很重要的知识点,是面试中一定会被问到的内容.之前我对闭包的理解主要是"通过闭包可以在函数外部能访问到函数内部的变量",对闭包运用的也很少,甚至自己写过闭包自己 ...

  2. 转:对JavaScript中闭包的理解

    关于 const     let      var  总结: 建议使用 let  ,而不使用var,如果要声明常量,则用const. ES6(ES2015)出现之前,JavaScript中声明变量只有 ...

  3. 第二话:javascript中闭包的理解

    闭包是什么? 通过闭包,子函数得以访问父函数的上下文环境,即使父函数已经结束执行. OK,我来简单叙述下,先上图. 都知道函数是javascript整个世界,对象是函数,方法是函数,并且js中实质性的 ...

  4. JavaScript中闭包的理解

    1.什么是闭包 我个人理解闭包就是函数中嵌套函数,但是嵌套的那个函数必须是返回值,才构成闭包: <!DOCTYPE html> <html> <head> < ...

  5. 在Javascript中闭包(Closure)

    在Javascript中闭包(Closure) 什么是闭包 “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. ...

  6. javascript中 (function(){})();如何理解?

    javascript中 (function(){})();如何理解? javascript中: (function(){})()是匿名函数,主要利用函数内的变量作用域,避免产生全局变量,影响整体页面环 ...

  7. javascript中闭包最简单的简绍

    javascript中闭包是什么 JavaScript 变量可以是局部变量或全局变量.私有变量可以用到闭包.闭包就是将函数内部和函数外部连接起来的一座桥梁. 函数的闭包使用场景:比如我们想要一个函数来 ...

  8. 在JavaScript中闭包的作用和简单的用法

    在JavaScript中闭包的作用和简单的用法 一.闭包的简介 作用域链:在js中只有函数有作用域的概念,由于函数内能访问函数外部的数据,而函数外部不能访问函数内部的数据,由上述形成一种作用域访问的链 ...

  9. Javascript中闭包的个人理解

       Javascript的一个特殊点就在于它的闭包和回调特性,这两个特性让初学Javascript的我是云里雾里,至今仍在苦苦摸索与理解.在一番苦思之后,整理了一下资料,将自己的理解思路记录下来,以 ...

随机推荐

  1. jquery 显示弹出层可利用动画效果

    1 show()方法和hide()方法 $("selector").show()  从display:none还原元素默认或已设置的display属性$("selecto ...

  2. BAT技巧

    FOR使用 枚举input.txt里的每一行,执行call :dosth %%i(以换行符为分割,默认是空格) for /f "delims=" %%i in (input.txt ...

  3. goldengate for big data 12.3发布

    主要新增特性:通用JDBC目标端:支持Amazon Redshift & IBM Netezza Oracle GoldenGate for Big Data 12.3现在支持通用的JDBC目 ...

  4. select2插件

    引入select2插件<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min. ...

  5. repo upload上传提交时发生remote rejected异常

    部分关键异常内容为: ...... remote:ERROR:committer email address %%%%%% remote:ERROR:does not match your user ...

  6. BZOJ 3675 序列分割

    斜率优化.注意要判分母为0的情况.dp数组可以滚一维. #include<iostream> #include<cstdio> #include<cstring> ...

  7. Xcode下的批量编辑

    说明:目前为止我找到三种查找与替换功能,如果有更多的方式,请在下面留言 第一种:我们常用的查找以及查找与替换功能 在Windows下,使用Ctrl+f 快捷键查找.用Ctrl+h来进行查找与替换功能. ...

  8. session过期,登录页被内嵌iframe的解决方案

    在登录页的js加上: if(window !=top){ top.location.href = location.href; } 就可以完美解决这个问题!

  9. winform客户端利用webClient实现与Web服务端的数据传输

    由于项目需要,最近研究了下WebClient的数据传输.关于WebClient介绍网上有很多详细介绍,大概就是利用WebClient可以实现对Internet资源的访问.无外乎客户端发送请求,服务端处 ...

  10. removeClass color-*

    bootstrap推出一系列的class名称,例如col-md-*.btn-*等等,有时候就会有想要将这一类className删掉的冲动~ 那咋样才能妥妥的实现呢?你是不是已经看到下面答案了,诶诶.. ...