美文网首页
三、JavaScript 笔记之闭包

三、JavaScript 笔记之闭包

作者: cqzhangjian | 来源:发表于2019-07-23 16:53 被阅读0次

    当函数作为参数传入函数,该函数为高阶函数,当函数作为函数的返回结果返回,就形成了闭包。返回的函数被引用,该引用就保留了定义时的词法作用域,即该引用就是闭包。

    1.函数作为返回值

            'use strict'
            function foo () {
                var attr = [];
                for(var i = 0; i < 10; i++){
                    attr.push(function(){
                        return i;
                    });
                }
                return attr;
            }
            var r = foo();
            console.log(r[0]()); //10
            console.log(r[1]()); //10
            console.log(r[2]());  //10
    

    改造1:

           'use strict'
            function foo () {
                var attr = [];
                for(let i = 0; i < 10; i++){
                    attr.push(function(){
                        return i;
                    });
                }
                return attr;
            }
            var r = foo();
            console.log(r[0]()); //0
            console.log(r[1]()); //1
            console.log(r[2]());  //2
    

    改造2:

            'use strict'
            function foo () {
                var attr = [];
                for(var i = 0; i < 10; i++){
                    attr.push(function(n){
                        return function(){
                            return n;
                        }
                    }(i));
                }
                return attr;
            }
            var r = foo();
            console.log(r[0]());
            console.log(r[1]());
            console.log(r[2]());  
    

    2.返回对象携带闭包

            'use strict';
    
            function create_counter(initial) {
                var x = initial || 0;
                return {
                    inc: function () {
                        x += 1;
                        return x;
                    }
                }
            }
            var c1 = create_counter();
            c1.inc(); // 1
            c1.inc(); // 2
            c1.inc(); // 3
    

    注意:对象中产生闭包,对象返回

    相关文章

      网友评论

          本文标题:三、JavaScript 笔记之闭包

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