zoukankan      html  css  js  c++  java
  • javascript模块化教程学习笔记07

    显然:在函数外部无法访问内部的局部变量:

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

    当需要这样做时,可以使用闭包。

    闭包:  闭包函数就是一个嵌套结构的函数,在一个函数内定义一个函数。

         由于在javascript语言中,子对象可以向上一级一级的寻找所有父元素的变量,父元素的所有变量对子元素都是可见的,反之,不成立。

         所以内嵌函数可以访问定义在外层函数中的所有变量和函数。但是从函数外部不能访问函数的内部变量和嵌套函数。当需要从函数外部获取内部的局部变量时,可以使用闭包:

    function f1(){
        var n = 0 ;
        function f2(){
             return n +=1;
        }
        return f2;
    }
    var add = f1();
    console.log(add());  //1
    console.log(add());  //2
    console.log(add());  //3

      函数f2嵌套在函数f1内部,函数f1返回函数f2,变量add指向函数f2。

      在f1执行完并返回后,闭包使得javascript的垃圾回收机制不会回收f1所占用的资源(因为f2的执行依赖于f1中的变量),造成函数中的变量都被保存在内存中。

      闭包的使用场景:提升效率:1.需要读取函数内部的变量;  2.让这些变量的值始终保存在内存中。

      闭包的缺点:  变量一直在内存中会让内存消耗过大,闭包同时关系到内存和执行速度。不能滥用闭包。

    匿名函数:

      匿名函数是没有名字的函数,当代码只需运行一次时,匿名函数有利于减少函数名称冲突的风险,有效避免全局变量的污染。

      语法格式:

    function (){
        //函数体
    }

    匿名函数自调用:

    ( function() {
           // 函数体;
    })  ();

      也可以把匿名函数赋值给某个对象的事件,在解释器经过时会立即运行:

      比如:

    window.onload = function () {
        alert("页面加载完毕。");
    };
  • 相关阅读:
    排序算法总结
    设计模式---(简单工厂模式,工厂模式,抽象工程模式),单例模式,代理模式,装饰器
    网易编程题——牛牛的闹钟
    Python + sqlalchemy + Pandas + Mysql 实现自动创建表,插入数据
    cucumber
    加油
    重新学习python爬虫
    python 网址
    《高兴》 贾平凹 摘抄
    funny python
  • 原文地址:https://www.cnblogs.com/mingnai/p/12289335.html
Copyright © 2011-2022 走看看