美文网首页
JS高级-闭包、沙箱

JS高级-闭包、沙箱

作者: 哎呦呦胖子斌 | 来源:发表于2018-11-08 08:20 被阅读0次
    作用域,作用域链,预解析

    变量:局部变量、全局变量

    作用域:变量的使用范围

    js中没有块级作用域,一对括号中定义的变量,这个变量可以在大括号外面使用,但函数中定义的变量是局部变量

    {

    var num=10;

    }

    这就是个全局变量

    作用域链:变量的使用,从里向外,层层的搜索,搜索到了就可以直接使用了,但如果搜索到了0级作用域的时候还没有找到这个变量,结果就报错。

    预解析:在浏览器解析代码之前,把变量的声明和函数的声明提前到该作用域的最上面。

    闭包

    闭包的概念:函数A中,有一个函数B,函数B中可以访问函数A中定义的变量或者是数据,此时形成了闭包。

    闭包的模式:函数模式的闭包、对象模式的闭包

    函数模式的闭包:

        function fun1 (){
            var num = 100;
            function fun2 (){
                console.log(num);
            }
            fun2();
        }
        fun1();
    
        function fun1 (){
            var num = 100;
            return function fun2 (){
                return num;
            }
        }
        console.log(fun1()());
    

    对象模式的闭包:

        function fun1 (){
            var num = 100;
            var obj = {
                age:num
            }
            console.log(obj.age)
        }
        fun1();
    
        function fun1 (){
            var num = 100;
            return {
                age:num
            }
        }
        console.log(fun1().age);
    

    闭包的作用:缓存数据、延长作用域链

        function bibao (){
            var num = 10;
            return function(){
                num++;
                return num;
            }
        }
        var ffBb = bibao();
        console.log(ffBb());
        console.log(ffBb());
        console.log(ffBb());
    

            输出的值分别为11,12,13 bibao()这个方法只执行了一次,也就是说num=10这个只执行了一次,但是ffBb()这个方法执行了三次。
    总结:如果想要缓存数据,就把这个数据放在外层的函数和里层的函数的中间位置
    闭包的优点和缺点:缓存数据
            局部变量时在函数中的,当函数执行完之后,局部变量就会被释放(这个操作是浏览器执行的),闭包后,里面的局部变量使用的作用域链就会被延长,不能及时的释放。

    沙箱

    在一个虚拟的环境中模拟真实世界,在虚拟环境中做操作,不会影响真实的世界。

    啥玩意?

    其实相当于开辟了一个局部环境,在这个环境里边的变量不会影响外边环境的同名变量。

    想到了啥,恩,自调用函数

    (function (){…})();

    (function (){…}());

    相关文章

      网友评论

          本文标题:JS高级-闭包、沙箱

          本文链接:https://www.haomeiwen.com/subject/waivxqtx.html