• 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,让这些捏不变量保持在内存中。 

  • 相关阅读:
    数据转换类型和算数运算符
    语言基础+数据类型
    JS(一)Prototype的使用
    Jquery EasyUI简介和数据的增删改查
    http简介
    《JavaScript语言精粹》笔记
    wcf
    简单工厂模式与抽象工厂模式
    <转载>C#中的特性(Attributes)
    <转载>C#IEnumerable和IEnumerator 详解
  • 原文地址:https://www.cnblogs.com/forstudy/p/3252038.html
Copyright © 2020-2023  润新知