zoukankan      html  css  js  c++  java
  • JavaScript -- 闭包

    用JS(包括Jquery)有一段时间了,但是对于闭包啥的一直没仔细研究过。闭包是JS中对于初学者而言,一个较难的知识点。

    以下是我从网上学习到的,我把它写出来,一方面分享给大家,有啥不对的见解还望指出;另一让面也是记录自己的学习过程。

    作用域

    要理解闭包,首先是作用域问题。

    JS的function中可以读取全局变量,如以下代码:

       var n =  1;
      function f1(){
        alert(n);
      }
      f1(); // 1
    

    但是,无法从function外部获取内部的局部变量,如以下代码:

     function f1(){
       var n = 1;
     }
     alert(n); // error, can't get variable n
    

    有些情况下,我们还是需要从外部获取函数中的局部变量,这式就需要使用闭包。考虑如下代码:

    function makeFunc() {
      var name = "Mozilla";
      function displayName() {
        alert(name);
      }
      return displayName;
    }
    
    var myFunc = makeFunc();
    myFunc();
    

    myFunc()执行后,浏览器将弹出"Mozilla"。

    但是,从“常理”来考虑, 

    var myFunc = makeFunc();

    这句代码将返回displayName这个函数,然而makeFunc()方法已经执行完毕,应当无法获取name变量的值了!但事实相反,很明显,代码不是按照“常理”在运行。

    这里,myFunc已经成为一个闭包。

    闭包

    闭包是一个特殊的函数,这个函数含有上下文环境。

    它有两个作用:1,可以读取函数内部的变量;2,让这些捏不变量保持在内存中。 

  • 相关阅读:
    1.第一个java程序
    5.第三章 运算符和基本选择结构
    7.关系运算符
    4.第二章章末总结
    3.计算员工工资
    JAVA并发操作——Thread常见用法(Sleep,yield,后台线程)
    JAVA 对象序列化(一)——Serializable
    JAVA 线程中的异常捕获
    JAVA反射机制实例
    JAVA 对象序列化(二)——Externalizable
  • 原文地址:https://www.cnblogs.com/forstudy/p/3252038.html
Copyright © 2011-2022 走看看