闭包的解释

当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这时就产生了闭包

在javascript中,只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成“定义在一个函数内部的函数“。所以,在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

  闭包的特点:

  1) 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
  2) 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
  简单的说,javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。

闭包应用场景

1.setTimeout

setTimeout(func,time)这里的func不能带参数,解决这个问题需要用闭包

function func(param) {
return function() {
alert(param);
}
}
var f = func(1)
setTimeout(f, 1000);

2.代替全局变量

//闭包,test2是局部变量,这是闭包的目的
//我们经常在小范围使用全局变量,这个时候就可以使用闭包来代替。
(function(){
var test2=222;
function outer(){
alert(test2);
}
function test(){
alert("测试闭包:"+test2);
}
outer(); //
test(); //测试闭包:222
}
)();
alert(test2); //未定义,这里就访问不到test2

3.为节点循环绑定click事件,在事件函数中使用当次循环的值或节点,而不是最后一次循环的值或节点

4.创建特权方法用于访问控制

使用闭包的注意点

(1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

(2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

最新文章

  1. arcgis desktop 10.1 license manager无法启动问题解决
  2. 将PostGIS转化为GeoJSON
  3. [Android]天气App 3 网络数据的请求和Json解析
  4. HTTP请求头host解析
  5. android 基于百度地图api开发定位以及获取详细地址
  6. Solution(项目部署):The server does not support version 3.0 of the J2EE Web module specification
  7. Linux下区分物理CPU、逻辑CPU和CPU核数
  8. MySQL基础语法------增删改查
  9. 使用clone
  10. Java集合之TreeSet
  11. asp.net session分布式共享解决方案
  12. 解决python2.x用urllib2证书验证错误, _create_unverified_context
  13. .net mvc的“从客户端中检测到有潜在危险的 Request.Form 值”问题解决
  14. Android Studio将引用第三方jar包的library打包成jar包
  15. 【redis专题(10)】KEY设计原则与技巧
  16. postman 介绍
  17. linux软件管理之源码包管理
  18. WIN10平板 如何修改网络IP地址为固定
  19. Eclipse 隐藏已关闭的项目
  20. [洛谷 P3239] [HNOI2015]亚瑟王

热门文章

  1. [python网络编程]使用scapy修改源IP发送请求
  2. Linux中如何安装RAR
  3. 学习windows编程 day1
  4. mysql -- 动态获取结果集(重点)
  5. RocketMQ在windows环境下的安装
  6. Kafka记录-常用命令选项说明
  7. ruby pluck用法,可以快速从数据库获取 对象的 指定字段的集合数组
  8. oracle 递归和connect by【转】
  9. Spring触发器触发2次问题【转】
  10. webstorm11.0.3连接ftp