什么是闭包

闭包,官方的解释是:一个拥有需要许多变量和绑定了这=这些变量的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包的特点:

1 作为一个函数变量的引用,当函数返回时,其处于激活状态。2 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

简单的说,javascript允许使用内部函数----即函数定义个函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的局部变量、参数和声明和其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。、

在javascript中每个函数都有一个Prototype属性,而对象没有。

1 不使用prototype属性定义的对象方法,是静态方法,只能直接用类名进行调用,另外,此静态方法中无法使用this变量来调用对象其他的属性。

使用prototype属性定义的对象方法,是非静态方法,只有在实例化之后才能使用,其方法内部可以this来引用对象自身中的其他属性。

javascript闭包的用途

模拟面向对象的代码风格,

1 匿名自执行函数

let arr1=[1,2,3,4];

(function(arr){

alert(arr.join(","));

})(arr1);

匿名函数,立即执行,由于外部无法引用它内部的变量,因此在函数执行完之后会立刻释放资源,关键是不污染全局对象。

结果缓存 封装

实现类和继承

我们定义一个Person方法,就像一个类,定义方法继承Person,并添加自己的方法

function Person(){

this.Name="zhangsan";

this.age=20;

}

let demo=function(){};

demo.prototype=new Person();

demo.prototype.say=function(){alert('this is a say function')}

let a=new demo();

a.age   //

a.Name //‘zhangsan’

a.say();

如果一个函数访问了它的外部变量,那么它就是一个闭包,闭包是一个函数,这个函数能够访问其他函数的作用域中的变量

闭包也会有很多弊端

function demo(){

var arr=[];

for(var i=0; i<10;i++){

arr[i]=function(){

  console.log(i);

}

}

}

let arr=demo();

arr.map(fn=>{

  fn();

});

结果打印的都是10;因为内部函数访问外部的变量,内存中i没有释放;想要达到预期的效果,可以改成如下:

function demo(){

var arr=[];

for(var i=0; i<10;i++){

arr[i]=function(num){

  return function(){

    console.log(num);
  } }(i);//立即执行的匿名函数,执行完之后就释放i的引用 } } let arr=demo(); arr.map(fn=>{   fn(); });

结果打印的是1 2 3 4 5 6 7 8 9

最新文章

  1. ABP源码分析三十一:ABP.AutoMapper
  2. 【无私分享:ASP.NET CORE 项目实战(第六章)】读取配置文件(一) appsettings.json
  3. C#创建安全的字典(Dictionary)存储结构
  4. 代码性能优化——task
  5. 【UR #2】树上GCD
  6. Mysql 中 iddata1的缩小步骤
  7. socket初级使用(客户端)
  8. wpf中button的无边框实现
  9. UVa 11524:In-Circle(解析几何)
  10. Sequel Pro 免费的MySQL管理客戶端(有SSH部分)
  11. JQuery(三) Ajax相关
  12. cf B Three matrices
  13. 房上的猫:StringBuffer类
  14. 如何把Excel中的单元格等对象保存成图片
  15. 超绚丽CSS3多色彩发光立方体旋转动画
  16. python coroutine
  17. python_面向对象魔法方法指南
  18. jquery添加用户 事例
  19. lombok 的使用
  20. 爬虫之动态HTML处理(Selenium与PhantomJS )

热门文章

  1. 最新ssh2构架
  2. vue class绑定 组件
  3. 小胖说事20--------GCD笔记
  4. PHP 实现Word,excel等转换pdf
  5. CentOS Linux搭建独立SVN Server全套流程(转)
  6. git+jenkins
  7. Vue 资源
  8. 服务器启动时Webapp的web.xml中配置的加载顺序(转载)
  9. 剑指Offer面试题16(Java版):反转链表
  10. Apache/2.4.9启动错误:AH01630: client denied by server configuration