JS高级-闭包、沙箱

2018-11-08  本文已影响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 (){…}());

上一篇 下一篇

猜你喜欢

热点阅读