jQuery闭包理解

  • A+
所属分类:Web前端
摘要

参考https://tylermcginnis.com/async-javascript-from-callbacks-to-promises-to-async-await/ 闭包定义-是指有权访问另一个函数作用域中的变量的函数。

参考https://tylermcginnis.com/async-javascript-from-callbacks-to-promises-to-async-await/

闭包定义-是指有权访问另一个函数作用域中的变量的函数。

让这些变量的值始终保持在内存中。

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

使用场景——函数作为返回值,函数作为参数传递。

返回值

jQuery闭包理解

 

 

 参数传递

jQuery闭包理解

上面的写法其实是最原始的写法,而在实际应用中,会将闭包和匿名函数联系在一起使用

形成闭包要符合这三个条件,而且三者缺一不可:

  • 1、函数A内部直接或间接返回一个函数B
  • 2、B函数内部使用着A函数的私有变量
  • 3、A函数外部有一个变量接收B函数

 闭包主要的三个特点

  • 1、延长了变量的生命周期;这个特点的好处就是变量会一直存在,
  • 因此也成了一个致命的缺点:就是这个函数的执行空间不会被销毁,而当一段内存空间中有一个不会被销毁的东西一直存在,就会出现内存占用,如果过多的话,还会导致内存溢出,结果引起内存泄漏。
  • 2、可以访问函数内部的私有变量;利用这个特点,我们可以在函数外部访问到内部的数据。
  • 3、保护私有变量;这是所有函数都具备的特点之一,普通函数的内部变量是不能在外部访问的,但是闭包空间可以。

匿名函数主要有两种常用的场景,一是回调函数,二是直接执行函数。

()()这种写法可以说是匿名函数的调用或者叫立即执行函数。

<script language="javascript"> var a = "a"; (function(){     var a="b";     alert(a); })(); alert(a); </script>

Function 对象是JavaScript 里面的固有对象,所有的函数实际上都是一个Function 对象。
var abc = new Function("x","y","return x*y;");  alert(abc(2,3)); // "6"

声明匿名函数---匿名函数就是没有实际名字的函数。
var abc=function(x,y){  return x+y;  }  alert(abc(2,3)); // "5"
立即执行函数:形如 (function(){})();的一类函数;

  立即执行函数的两种写法

  • (function(){}()); W3C 建议第一种
  • (function(){})();

jQuery闭包理解