#函数高级


##一.执行上下文--代码的运行环境    保存到栈中   (特点:先进后出)
    1.分类  
    -全局上下文
    -局部上下文(函数上下文)
     -- 全局上下文在浏览器打开时产生,浏览器关闭时销毁
     --局部上下文在函数调用时产生,函数结束时关闭
--------------------
#二.变量对象;上下文的创建阶段,其内部还同时创建了一个“变量对象”
    1.查找 arguments 对象  (找参数)
    2.找当前这个上下文的所有声明式函数
    3.查找所有var声明的变量
    保存数据的容器
#三.建立作用域链

    最先找自己家的变量对象 -->  下一个要看上一个哪儿创建的

    //作用域链上的每一个变量对象,它的后一个变量对象,是当前变量对象的函数声明时所在的上下文的变量对象
    例如: function fn1(){
           var a=1;
             function fn2(){
                 var b=2;
                 function fn3(){
                     var b=3;
                 }
                 function fn4(){
                     var c=5;
                     console.log(a+b+c);
                 }
                 fn3();
                 fn4();
             }
             fn2();
            }
           fn1();


#四.闭包 : 由于程序检测到后面还是要使用到函数体内部的数据,所以销毁函数的时候还会留下数据
    1.扩大了作用范围,延长了作用时间
    2.避免变量污染
#五:递归函数
        let arr = [[1, 2, 3], 4, 5, 6, [7, 8, [9, 11]], 10];
        function fn(arr) {
            for (let i = 0; i < arr.length; i++) {
                //要把第一数组遍历出来
                if (typeof arr[i] == "object") {
                    // for (let j = 0; j < arr[i].length; j++) {
                    //     console.log(arr[i][j]);
                    // }
                    fn(arr[i]);
                } else {
                    console.log(arr[i]);
                }
            }
        }
        fn(arr);

猜你喜欢

转载自www.cnblogs.com/keepitreal/p/10311306.html