`

《Javascript高级程序设计(第3版)》闭包理解

阅读更多

“闭包是指有权访问另一个函数作用域中的变量的函数。”--《Javascript高级程序设计(第3版)》

 

      看以下代码:

<script type="text/javascript">
    function outer() {
        var i = 10;
        return function() {
            return i++;
        }
    }
   
    var inner = outer();
    var str = "";
    for (var i=0;i<5;i++) {
        str += inner()+" ";
    }
    document.write(str);
</script>

      结果:10 11 12 13 14

 

      认为闭包是一个现象,是内部函数(function() {return i++})引用了外部函数(outer)的变量(i),且被返回到外部去(var inner = outer()),导致外部函数的执行环境没被释放(i的值得以保存)的现象。

 

      看到那句话的时候,才意识到自己的理解是错误的。上述现象是闭包的特性、现象,这种奇特的现象,可以通过结合作用域链、垃圾收集的知识点得到解释。

 

      现在更新下知识:闭包是一个函数。我们可以通过判断该函数是否能够访问其他函数作用域中的变量、函数来判断一个函数是不是一个闭包。

 

       提出疑问:当一个函数有权限但没有访问其可访问的其他函数的变量、函数时,它还是一个闭包吗?如果根据书中的定义,那么答案是肯定的。

      如下面的代码:

<script type="text/javascript">
    function demo1(name){
        this.getName = function() {
            return name;
        }
    }
   
    var inst  =  new demo1("Lcllao");
    alert(inst.getName());//这个应该是了,通过new方式执行函数test,返回了当时的this对象。通过getName访问当时作用域上的name变量。
    demo1("Lcllao");//在这个时候,上面的匿名函数是闭包吗?
   
    function demo2() {
        var i = 0;
        return function() {//按照上述定义,这个匿名函数应该也是一个闭包。他有权但没访问demo2的变量i。
            return "";
        }
    }
</script>

 

分享到:
评论

相关推荐

    Javascript 高级程序设计(第3版)超清中文PDF

    《JavaScript高级程序设计》(第3版)是一本深入探讨该语言精髓的权威书籍,它为读者提供了全面且深入的JavaScript知识,包括语言核心、DOM操作、BOM处理、事件处理以及面向对象编程等多个方面。 在书中,作者详细...

    JavaScript 高级程序设计(第3版)【附源代码】

    通过阅读《JavaScript高级程序设计(第3版)》,开发者不仅可以掌握JavaScript的基本用法,还能深入理解其内部机制,从而编写出更高效、更易于维护的代码。这本书对于想要提升JavaScript技能的前端开发者或全栈...

    JavaScript 高级程序设计 第3版

    《JavaScript高级程序设计》第三版是一本备受推崇的教材,它深入浅出地介绍了JavaScript的核心概念和技术,尤其在原型这一重要概念上的讲解备受赞誉。本文将深入探讨这本书中的关键知识点,帮助读者更好地理解和掌握...

    Javascript 高级程序设计(第3版)+ 源代码

    《JavaScript高级程序设计(第3版)》是深入理解JavaScript编程的一部经典著作,它详细讲解了JavaScript的核心概念、语法以及高级特性。这本书结合源代码,为读者提供了丰富的实践案例,帮助开发者深入学习和掌握这...

    Javascript 高级程序设计(第3版)带源代码

    《JavaScript高级程序设计(第3版)》是一本深入探讨该语言精髓的权威著作,它为读者提供了全面且深入的JavaScript知识,包括语言核心、DOM操作、BOM处理、事件处理以及面向对象编程等关键领域。 在本书中,作者...

    Javascript 高级程序设计(第3版)源代码

    "JavaScript高级程序设计(第3版)"是一本深入探讨该语言精髓的权威书籍,它为开发者提供了全面且深入的理解JavaScript的途径。这本书的源代码是学习者实践和理解书中理论的宝贵资源。 JavaScript的核心特性包括其...

    Javascrpt 高级程序设计(第3版)英文1

    【JavaScript 高级程序设计(第3版)】是一本针对JavaScript开发人员的高级指南,旨在涵盖该语言的各种核心特性和实用技术。本书是超级畅销书的最新版本,结合了ECMAScript 5和HTML5的新发展,为读者提供了一个全面...

    Javascrpt 高级程序设计(第3版)

    《JavaScript 高级程序设计(第3版)》是一本深度剖析JavaScript编程语言核心概念和技术的权威著作。随着计算机硬件的飞速发展以及浏览器性能的显著提升,JavaScript在Web开发中的地位日益凸显,催生了大量的...

    Javascript 高级程序设计

    **JavaScript 高级程序设计**,作为Web开发领域的一本经典...通过学习《JavaScript高级程序设计(第3版)》,你不仅能够掌握JavaScript的核心技术,还能了解到最新的Web开发趋势,为成为专业的Web开发者打下坚实基础。

    JavaScript入门经典(第3版)例子6-10章

    《JavaScript入门经典(第3版)》是学习这一语言的经典教材,涵盖了从基础到进阶的广泛主题。例子6-10章是这本书的重要部分,它们深入浅出地讲解了JavaScript的核心概念和技术。 在Chapter 06“控制流程”中,你会...

    JavaScript入门经典(第3版)例子1-5章

    《JavaScript入门经典(第3版)》是学习这一语言的经典教材,涵盖了基础到进阶的知识点。例子1-5章主要涉及到JavaScript的基础语法、变量、数据类型、控制结构以及函数等内容。 1. **基础语法**:JavaScript是一种弱...

    JavaScript入门经典(第3版)所有实例,有很好的参考价值

    《JavaScript入门经典(第3版)》是一本专为初学者设计的教程,旨在帮助读者掌握JavaScript的基础知识并理解其在实际开发中的应用。这个压缩包包含了书中所有的实例代码,这些实例对于学习和理解JavaScript的语法、...

    JavaScript高级程序设计(第3版)学习笔记 概述

    本书《JavaScript高级程序设计(第3版)》为深入学习提供了很好的参考,通过专题学习笔记,可以逐步掌握JavaScript的各个知识点,并且能够随着复习和实践得到进一步的提升。 在学习的过程中,开发者会发现...

    JavaScript高级程序设计(第3版)学习笔记6 初识js对象

    在深入理解JavaScript对象时,作用域、执行环境和闭包是不可忽视的概念。对象和它们的方法通常在特定的执行环境中运行,这影响着变量和函数的作用域。闭包是一种特殊的函数,它能够“记住”并访问其词法作用域,即使...

    Javascript相关书籍从入门到精通

    第三本,《JavaScript高级程序设计(第3版)》,通常被誉为“红宝书”,是JavaScript学习的经典之作。这本书深入探讨了JavaScript的高级特性,包括闭包、原型链、异步编程、ES6及以后的新特性等。掌握了这些知识,你...

    javascriptgaojichengxushejidi3ban_downcc.zip

    通过阅读《JavaScript高级程序设计(第3版)》,开发者不仅能深化对JavaScript的理解,还能掌握编写高效、可维护代码的技巧。配合书中的实例和练习,将有助于提升实际开发能力。同时,提供的绿色资源网链接可能包含...

    js-高性能JavaScript-JavaScript语言精粹修订版

    #### 四、《JavaScript高级程序设计_第3版》 **知识点概述:** 1. **JavaScript核心特性:** - 深入理解JavaScript的基本特性和语言细节。 - 掌握ECMAScript 6+的新特性和API。 2. **DOM操作与BOM:** - 学习...

Global site tag (gtag.js) - Google Analytics