• 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("页面加载完毕。");
    };
  • 相关阅读:
    使用 Trello 管理自己与团队的工作
    Google译者工具包
    curl的速度为什么比file_get_contents快以及具体原因
    Mac使用秘钥登录Linux服务器
    curl抓取页面时遇到重定向的解决方法
    PHP cURL 超时设置 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 的区别
    max函数比较字符串类型
    Dictionary 泛型类
    .NET Framework 概念概述
    认知Web服务器
  • 原文地址:https://www.cnblogs.com/mingnai/p/12289335.html
Copyright © 2020-2023  润新知