js中的闭包学习心得

 更新时间:2018年02月06日 08:54:12   投稿:laozhang  
这篇文章主要介绍了js中的闭包学习心得以及重要点的代码写法,对此有兴趣的朋友跟着小编一起学习下吧。

闭包

按中文的意思就是关上一个包的意思。如果我们把函数的作用域当做是一个包的话,那这个词很形象体现了它的作用 。函数的正常的执行流程是当函数中的语句执行完后,程序会自动销毁这个函数的作用域,但是当一个函数中声明了另一个函数,并且这个子函数执行时存在引用父函数的变量,就会形成闭包,形象点说就相当于把父函数的作用域给关闭了起来,不让程序去销毁它。

例如:

function a() {
  var name = "xuxu";
  function b() {
    console.log(name);
  }
  // 此处产生闭包 
  b();
} 
a();

当函数可以记住并访问它所在的作用域链时,就产生了闭包 当然,大部分的闭包都不是这么直观的,因为子函数的调用是可以在父函数之外的,例如:

function a() {
  var name = "xuxu";
  function b() {
    console.log(name);
  }
  return b;
} 
var c=a();
// 此处产生闭包 此处的c函数其实就是a函数
c();

通过以上代码,我们也可以看出一个闭包的好处,就是我们再全局作用域(此处是widow)下访问到了局部作用域(a函数)的作用域的值,按正常的词法作用域是无法这么做的,但是当我们使用闭包是就可以了。然后我们再看一点我们平时写的比较多的:

function foo() {
  var a = 2;
  function baz() {
     // 2
    console.log( a ); 
  }
  bar( baz );
}
function bar(fn) {
// 大家快看呀,这就是闭包!
  fn(); 
}

又或者

var fn;
function foo() {
  var a = 2;
  function baz() {
    console.log( a );
  }
  // 将baz分配给全局变量
  fn = baz; 
}
function bar() {
   // 大家快看呀,这就是闭包!
  fn();
}
foo();
// 2
bar(); 

以上也是闭包,因此在函数内部调用子函数,或者通过何种手段将内部函数传递到所在的词法作用域以外,它都会持有对原始定义作用域的引用,无论在何处执行这个函数都会使用闭包。

相关文章

  • 控制input输入框中提示信息的显示和隐藏的方法

    控制input输入框中提示信息的显示和隐藏的方法

    这篇文章主要介绍了怎样控制input输入框中提示信息的显示和隐藏 ,需要的朋友可以参考下
    2014-02-02
  • 如何基于小程序实现发送语音消息及转文字功能

    如何基于小程序实现发送语音消息及转文字功能

    最近为小程序增加语音识别转文字的功能,坑路不断,特此记录,下面这篇文章主要给大家介绍了关于如何基于小程序实现发送语音消息及转文字功能的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • 教大家轻松制作Bootstrap漂亮表格(table)

    教大家轻松制作Bootstrap漂亮表格(table)

    这篇文章主要为大家详细介绍了Bootstrap轻松制作漂亮表格table的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • JS实现Ajax的方法分析

    JS实现Ajax的方法分析

    这篇文章主要介绍了JS实现Ajax的方法,结合实例形式分析了ajax的概念、原理、js实现与使用方法,需要的朋友可以参考下
    2016-12-12
  • 基于JavaScript实现HarmonyOS备忘录服务卡片

    基于JavaScript实现HarmonyOS备忘录服务卡片

    这篇文章主要介绍了基于JavaScript实现HarmonyOS备忘录服务卡片,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • JS中判断某个字符串是否包含另一个字符串的五种方法

    JS中判断某个字符串是否包含另一个字符串的五种方法

    本文给大家带来JS中判断某个字符串是否包含另一个字符串的五种方法,有string对象的方法,match() 方法,RegExp对象的方法,test() 方法,exec() 方法,具体内容详情大家参考下本文
    2018-05-05
  • 小程序封装路由文件和路由方法(5种全解析)

    小程序封装路由文件和路由方法(5种全解析)

    这篇文章主要介绍了小程序5种路由方法使用场景,封装路由文件和路由方法,提升小程序体验和开发效率,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 详解JVM系列之内存模型

    详解JVM系列之内存模型

    JVM是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的。JVM的内存区域可以被分为:线程、栈、堆、静态方法区。本文将介绍JVM的内存模型,感兴趣的小伙伴,可以参考下
    2021-06-06
  • JavaScript动态检测密码强度原理及实现方法详解

    JavaScript动态检测密码强度原理及实现方法详解

    这篇文章主要介绍了JavaScript动态检测密码强度原理及实现方法,结合具体实例形式详细分析了javascript针对输入字符串密码强度检测的原理与相关判断操作技巧,需要的朋友可以参考下
    2019-06-06
  • JS实现图片横向滚动效果示例代码

    JS实现图片横向滚动效果示例代码

    图片横向滚动效果,大家可能都已经很熟悉了,本文为大家介绍下使用js实现横向滚动效果,喜欢的朋友可以参考下,希望对大家有所帮助
    2013-09-09

最新评论