闭包

作者: MISS_3ca2 | 来源:发表于2020-08-13 09:20 被阅读0次
    闭包可以让你从内部函数访问外部函数作用域,在javascript中每当函数被创建,就会在函数生成时生成闭包
    function init (){
       var name = '小明'; //name 是一个被 init 创建的局部变量
       function displayName(){ // displayName() 是内部函数,一个闭包
             console.log(name) // 使用了父函数中声明的变量
        }
        displayName()
    }
    init()
    
    function init2(){
                var age = 20;
                function displayAge(){
                    console.log(age);
                }
                return displayAge;
            }
            init2()();
    
    从本质上讲 makeadd是一个工厂函数 创建了将指定的值和他的参数相加求和的函数
    function makeadd(x){
                return function(y){
                    return x+y
                }
            }
    
            var add5 = makeadd(5);
            var add6 =  makeadd(6);
            console.log(add5(4))
            console.log(add6(2))
    
    Counter1 和 Counter2是各自独立的 每个闭包都是引用自己词法作用域内的变量privateCounter
    每次调用其中一个计数器时,通过改变这个变量的值,会改变这个闭包的词法环境,然而在一个闭包内对变量的修改,不会影响另一个闭包中的变量
    var makeCounter = function() {
                var privateCounter = 0;
                function changeBy(val) {
                    privateCounter += val;
                }
                return {
                    increment: function() {
                        changeBy(1);
                    },
                    decrement: function() {
                        changeBy(-1);
                    },
                    value: function() {
                        return privateCounter;
                    }
                }  
            };
    
            var Counter1 = makeCounter();
            var Counter2 = makeCounter();
            console.log(Counter1.value()); /* logs 0 */
            Counter1.increment();
            Counter1.increment();
            console.log(Counter1.value()); /* logs 2 */
            Counter1.decrement();
            console.log(Counter1.value()); /* logs 1 */
            console.log(Counter2.value()); /* logs 0 */
    

    创建一个可以无限次调用的闭包函数

    function a(){
                var i = 10;
                return function b(){
                    console.log(i)
                    return b
                }
                
            }
           console.log(a()()()()()()()) 
    

    相关文章

      网友评论

          本文标题:闭包

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