• JavaScript的3大组成部分&&ECMAScript函数&&闭包


    1.JavaScript实现是由ECMAScript、DOM和BOM组成。
    a.ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象.
    b.DOM[文档对象模型]是HTML和XML的应用程序接口,DOM将把整个页面规划成由节点层级构成的文档。
    c.BOM[浏览器对象模型]可以对浏览器窗口进行访问和操作。

    JS对象有:Array Boolean Date Math Number String RegExp Functions Events
    Browser对象有:Window Navigator Screen History Location
    DOM对象有:Document Element AttributeEvent

    2.ECMAScript函数
    a. arguments对象,无需明确指出参数名,就能访问参数。
    1)比如:
    function a(a){
    alert(arguments[0]);
    }
    a(1);
    执行结果将是弹出框显示1;
    2)ECMAScript不会验证传递给函数的参数个数是否等于函数定义的参数个数。
    比如:
    function a(a,b){
    alert(arguments[0]);
    }
    只传一个参数仍然正常执行。
    a(1);
    3)检测函数的参数个数 用arguments.length

    b.Function 对象
    ECMAScript 的函数实际上是功能完整的对象。

    <script>
    var a = n
    
    // 1实例化Function类对象
    var func = new Function("a","b","alert(a+b);");
    func(1,2);//弹出3
    
    // 2 重载func函数 (其实也是func值被改成了指向不同对象的指针,函数名只是指向函数对象的引用值)
    var func = new Function("a","b","alert(a);");
    func(1,2);//弹出1
    
    // 3使两个变量指向同一个函数
    var nfunc = func;
    nfunc(1,2);//弹出1
    
    // 4另外两种写法
    var func = function(a,b){
        alert(a);
    }
    
    function func(a,b){
        alert(a);
    }
    //所以 函数只不过是一种引用类型
    </script>
    

      

    3.闭包
    由于Javascript语言特有的"链式作用域"结构,
    有个问题:函数外部无法读取函数内的局部变量
    怎么实现:在函数内部,再定义一个函数

    <script>
        //函数a1
        function a1(){
            //局部变量
            var n = 1;
            //子函数a2
            function a2(){
                console.log(n);
            }
            //声明全局、匿名函数 
            _do = function(){n++;}
            // 返回a2的引用
            return a2;
        }
        //拿到a2的引用
        var a2 = a1();
        //执行
        a2();//结果1
        _do();
        a2();//结果2
    </script>
    

      

    其实 a2 可以写成 a2 = function(){},也就是说a2被赋给了一个全局变量,a2始终在内存中,a1是a2的父函数,所以a1也一直在内存中,不会在调用结束后,被垃圾回收机制回收。
    总结:
    1.闭包会使得函数中的变量都被保存在内存中。
    2.闭包会在父函数外部,改变父函数内部变量的值。

  • 相关阅读:
    爬取药智网中的方剂信息
    日报3.13
    数据库添加出错
    Bencode
    一些安全网络协议
    代码质量不重要
    Jordan Peterson
    随身记录的缺点
    Why is Go PANICking?
    go问
  • 原文地址:https://www.cnblogs.com/lzs-888/p/6090301.html
Copyright © 2020-2023  润新知