zoukankan      html  css  js  c++  java
  • 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.闭包会在父函数外部,改变父函数内部变量的值。

  • 相关阅读:
    cb快捷键
    N的阶乘的长度 V2(斯特林近似)
    最大子序列和(Max Sum ,Super Jumping! Jumping! Jumping! )
    关于莫比乌斯和莫比乌斯反演
    最少拦截系统
    set用法详解
    几种数学公式(环排列 母函数 唯一分解定理 卡特兰数 默慈金数 贝尔数 那罗延数)
    最小堆算法
    并查集算法
    dijkstra算法演示
  • 原文地址:https://www.cnblogs.com/lzs-888/p/6090301.html
Copyright © 2011-2022 走看看