• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > js闭包

js闭包

作者:weixin_40006523 字体:[增加 减小] 来源:互联网 时间:2017-10-01

weixin_40006523通过本文主要向大家介绍了javascript,闭包等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

之所以有闭包这个概念,其实是因为变量作用域的问题。我们都知道变量的作用域分为全局作用域和局部作用域。全局变量可以在函数内部读取,在外部却不可以读取函数内部的局部变量。然而出于各种原因,有时候我们需要读取函数内的局部变量。一般情况下是不能这样做的,我们可以取巧,就是在函数内部再定义一个函数,返回变量的值:

 

function f1(){
    var n=999;
    function f2(){
      return n; // 999
    }
	return f2;
  }

result = f1();

result(); // 999

这样就能在外部读取函数内的变量了。所有具有链式作用域的语言都有闭包这个概念。如果不用想太复杂的话,可以简单的把闭包想象成函数内部的函数,就是把函数外部和内部链接起来的桥梁。

闭包的作用主要有两个,第一个就是读取内部变量,第二个就是把变量的值储存在内存中。

我们都知道如果定义一个函数,每次创建一个实例对象时,由于有垃圾回收机制,都会把函数内变量的值清除,每次都会对对象进行初始化。但是如果使用闭包,例如:

 

function f1(){
    var n=999;
    nAdd=function(){n+=1}
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999
  nAdd();
  result(); // 1000

这里运行了两次,可以看到n的值没有被清除。这是因为我们把f1赋值给了全局变量result,而f1就是f2的父函数,所以f2就一直存在于内存中,因此它的父函数f1也就存在内存中,不会在调用后被垃圾回收机制清除。

 

要注意在使用闭包的时候尽量不要使用循环语句,这会造成一些错误。
 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • JavaScript瀑布流布局实现代码
  • Javascript实现页面滚动时导航智能定位
  • JavaScript实现打地鼠小游戏
  • javascript编写简易计算器
  • JavaScript实现无穷滚动加载数据
  • JavaScript仿微信打飞机游戏
  • javascript 中关于array的常用方法详解
  • javascript 中的继承实例详解
  • JavaScript函数表达式详解及实例
  • JavaScript中双向数据绑定详解

相关文章

  • 2017-05-11浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
  • 2017-05-11javaScript+turn.js实现图书翻页效果实例代码
  • 2017-05-11微信小程序 高德地图SDK详解及简单实例(源码下载)
  • 2017-05-11Javascript中字符串相关常用的使用方法总结
  • 2017-05-11微信小程序 在线支付功能的实现
  • 2017-05-11在 Angular 中实现搜索关键字高亮示例
  • 2017-05-11JavaScript 批量创建数组的方法
  • 2017-05-11es6的数字处理的方法(5个)
  • 2017-05-11js实现模糊匹配功能
  • 2017-05-11JS实现的自动打字效果示例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 微信小程序中多个页面传参通信的学习与实践
    • 鼠标经过出现气泡框的简单实例
    • React中ES5与ES6写法的区别总结
    • Express之get,pos请求参数的获取
    • Javascript中引用类型传递的知识点小结
    • 微信小程序 常见问题总结(4058,40013)及解决办法
    • nodejs个人博客开发第七步 后台登陆
    • CodeMirror js代码加亮使用总结
    • BootStrap table删除指定行的注意事项(笔记整理)
    • 原生js实现无限循环轮播图效果

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有