`
nankaiJerry
  • 浏览: 122507 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

jQuery学习笔记三:闭包

 
阅读更多

       既然说到在JavaScript中函数作为“一等公民”而存在,那我们就不得不谈一下另一个高级的函数专题——闭包(closure)。

 

       很多语言都对闭包有不同程度的支持,像是RubyPython以及objective c。学过Java的应该知道,Java虽然没有显式支持闭包,但对于非静态内部类而言,它不仅记录了其外部类的详细信息,还保留了一个创建非静态内部类对象的引用,并且可以直接调用外部类的private成员,因此可以吧非静态内部类当成面向对象领域的闭包。

       简单地说,闭包就是Function实例,外加对于Function实例的执行来说必需的、来自环境的本地变量。在声明函数时,可以在声明之处引用其作用域内的任何变量。甚至在声明之处已经超出作用域而关闭声明之后,这些变量仍为该函数所支持。

       看如下代码:

<head>
     <title>Closure</title>
     <scriptsrc="jquery.js"></script>
     <script>
         $(function(){
            varlocal=1;    //名为local的本地变量
            window.setInterval(    //建立3s触发一次的计时器
            function()
            {
               //将内容增加到div元素中
               $('#display').append('<div >At'+new Date()+ ' local='+local+'</div>');
               local++;               
            },
            3000);
         });
     </script>
     </head>
     <body>
       <divid="display"></div>
     </body>
</html>

 

 


 

 加载页面,一段时间后,我们看到页面内容为:

 

At Sun Apr 07 2013 14:18:25 GMT+0800 (中国标准时间) local=1

At Sun Apr 07 2013 14:18:28 GMT+0800 (中国标准时间) local=2

At Sun Apr 07 2013 14:18:31 GMT+0800 (中国标准时间) local=3

At Sun Apr 07 2013 14:18:34 GMT+0800 (中国标准时间) local=4

At Sun Apr 07 2013 14:18:37 GMT+0800 (中国标准时间) local=5

At Sun Apr 07 2013 14:18:40 GMT+0800 (中国标准时间) local=6


 

       我们可能认为,在回调函数(setInterval函数里的函数)执行期间,local的值应该是未定义的(因为local定义在回调函数之外,且回调函数在页面加载3秒内触发,也就是在就绪处理函数执行完毕很久才触发)。但是为什么出现了上面的页面内容呢?

       这就是我们所说的“闭包”。JavaScript里所有的闭包,被隐式地创建。当就需处理程序退出时,虽然local声明所在的块确实超出了作用域,但是函数声明所创建的闭包(包括local),在该函数的生命期内保持在作用域内。

       注意:无意的闭包可能带来意外的后果,例如,循环引用可以导致内存泄露。内存泄露的典型事例是创建向后引用闭包变量的DOM元素,组织了那些变量的回收。

分享到:
评论

相关推荐

    jquery 学习笔记

    **jQuery学习笔记** jQuery,作为一个轻量级的JavaScript库,极大地简化了JavaScript的DOM操作、事件处理、动画设计以及Ajax交互。这篇学习笔记将深入探讨jQuery的核心概念和实用技巧,帮助初学者快速上手。 ## 一...

    JavaScript及jQuery学习笔记(0)

    这篇学习笔记将探讨这两个技术的基础和关键概念。 首先,JavaScript是一种轻量级的脚本语言,它主要在客户端运行,允许网页对用户交互做出实时响应。JavaScript的核心特性包括变量、数据类型(如字符串、数字、布尔...

    第一课 jquery学习准备工作-011

    【jQuery学习准备工作详解】 在深入学习jQuery之前,我们需要先对前端开发的基础有一个全面的理解。jQuery是一种强大的JavaScript库,它简化了HTML文档遍历、事件处理、动画制作和Ajax交互等任务。本篇将从理论基础...

    大佬的前端学习笔记

    学习笔记会涵盖JavaScript的基础语法、变量、数据类型、控制结构、函数、对象、数组、作用域、闭包、异步编程(Promise和async/await)等内容。同时,也会介绍ES6及以后版本的新特性,如箭头函数、模板字符串、解构...

    javascript入门学习笔记

    JavaScript,一种广泛应用于Web开发的脚本语言,是前端开发的核心...随着学习的深入,还会接触到更多高级特性和框架,如闭包、原型链、AJAX、jQuery、Vue.js、React.js等,这些都是JavaScript开发者必备的知识技能。

    jQuery学习笔记之总体架构

    先来看代码: 代码如下:(function (window, undefined) { //构建jQuery对象 var document = window.document, navigator = window.navigator, location = [removed]; var jQuery = (function () { var jQuery ...

    JavaScript学习笔记

    本学习笔记旨在帮助初学者快速掌握JavaScript的核心概念和技术,实现从入门到精通的过渡。 1. **基础语法** - 变量声明:JavaScript支持var、let和const关键字声明变量,理解它们的作用域和提升特性至关重要。 - ...

    JavaScript 入门 新手学习笔记

    这篇"JavaScript入门新手学习笔记"提供了全面的学习资源,适合初学者系统性地掌握这一技术。 笔记可能包含了以下关键知识点: 1. **基础语法**:JS的基础包括变量(var、let、const)、数据类型(如字符串、数字、...

    jquery学习资料,好多例子

    **jQuery学习资源详解** jQuery,一个轻量级的JavaScript库,因其简洁的API和强大的功能而备受开发者喜爱。本资源包“jquery学习资料,好多例子”包含了一系列实用的学习材料,旨在帮助初学者快速掌握jQuery的核心...

    jquery笔记1

    jQuery的核心思想是“链式调用”和“封装”,源码中大量使用了闭包和原型链,值得深入学习。 **七、工具** jQuery还提供了一些开发工具,如jQuery Migrate,帮助开发者解决旧版本jQuery代码在新版本中的兼容问题。...

    学习笔记 MHT3

    【学习笔记 MHT3】是一份综合性的IT学习资源,主要涵盖了源码分析、工具使用以及Web应用程序开发的多个方面。MHT文件是单一文件网页(MHTML)的格式,通常用于保存完整的网页内容,包括文本、图片和其他资源。这份...

    JS和JQuery的知识点和用法总结与分析

    6. **闭包**:函数可以访问并操作其词法作用域内的变量,即使该作用域已经结束。 **jQuery基础与应用** 1. **选择器**:jQuery提供了一系列CSS选择器,如ID选择器、类选择器、属性选择器等,用于高效地选取DOM元素...

    前端学习笔记1

    这篇学习笔记将主要关注JS及其相关的技术。以下是对每个文件名称所对应知识点的详细说明: 1. **ECMAScript (3.1.ECMAScript.docx)** ECMAScript是JavaScript的标准化规范,由ECMA国际维护。自1997年以来,已经...

    JS学习笔记.docx

    这份"JS学习笔记.docx"是针对JavaScript初学者的入门资料,旨在帮助读者快速掌握JavaScript的基础知识。 一、常用快捷键 在编程中,快捷键能够提高编程效率。在JavaScript开发中,熟悉如Ctrl+C(复制)、Ctrl+V...

    jquery+纯生javascript写的适合初学者

    在描述中,“写于初学时,适于初学者,仅供参考,随意分享”表明这些材料可能是作者学习过程中的笔记或项目,可能包含一些基础实践和学习心得,对于同样初学者来说是一份不错的学习资源。 至于“五子棋”这个文件名...

    我的JavaScript学习笔记

    这篇学习笔记将带你深入了解JavaScript的基础和一些进阶应用。 首先,我们从"Js基本语法"开始。JavaScript是一种弱类型、解释型的脚本语言,它支持变量声明(var、let、const)、数据类型(包括基本类型:字符串、...

    javaScript学习笔记.rar

    这个“javaScript学习笔记.rar”压缩包显然包含了作者在学习JavaScript过程中的心得和记录,对于初学者或者想要深入理解JavaScript的人来说,是一份宝贵的资源。 JavaScript与Java虽然名字相似,但两者实际上是不同...

    JavaScript 学习笔记集和代码库

    压缩包中的“JavaScript学习笔记集”可能包含了语言的基本概念、语法特性、面向对象编程、闭包、原型链、作用域、异步编程等内容的详细解释。而“代码库”可能包含了大量的示例代码,涵盖各种常见任务,如表单验证、...

    java学习笔记.zip

    这些"java学习笔记.zip"包含的文件详细涵盖了Java的多个重要方面,包括基础、进阶以及与之相关的框架技术。以下是对每个文件内容的概览: 1. **10、JavaSE:IO流.pdf** Java标准版(JavaSE)中的输入/输出(IO)流...

Global site tag (gtag.js) - Google Analytics