• 技术文章 >web前端 >js教程

    js中闭包的定义是什么?js闭包的应用场景

    不言不言2018-09-10 17:29:05原创2052
    本篇文章给大家带来的内容是关于js中闭包的定义是什么?js闭包的应用场景,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    什么是闭包

    闭包是指有权访问另一个函数作用域中的变量的函数。

    function createFunc() {
        var name = "wheeler";
        return function () {
            return name;
        }
    }
    
    var nameFunc = createFunc();  // nameFunc是一个闭包
    
    var name = nameFunc();
    
    console.log(name);
    
    // 解除对匿名函数的应用(以便释放内存)
    nameFunc=null;

    内部函数可以访问外部函数的变量name,内部函数的作用域包含了外部函数的作用域
    (由于闭包会携带包含它的函数的作用域,可能导致内存占用过多,因此谨慎使用闭包)

    可以通过模仿块级作用域减少闭包导致的内存占用过多

    // 块级作用域(通常称为私有作用域)的匿名函数的语法
    (function(){
        // 块级作用域
    })();

    将闭包定义在块级作用域里面

    // 可以减少闭包占用的内存问题,因为没有指向匿名函数的引用。只要函数执行毕,就可以立即销毁其作用域链了
    (function(){
        function createFunc() {
            var name = "wheeler";
            return function () {
                return name;
            }
        }
    
        var nameFunc = createFunc();
    
        var name = nameFunc();
    
        console.log(name);
    })();

    闭包的应用场景

    var returnNum = (function () {
        var num = 0;
    
        function changeNum(value) {
            num = value;
        }
    
        return {
            add: function () {
                changeNum(10);
            },
            delete: function () {
                changeNum(-10);
            },
            getNum: function () {
                return num;
            }
        }
    })();
    
    // 闭包
    console.log(returnNum.getNum());
    returnNum.add();
    console.log(returnNum.getNum());
    returnNum.delete();
    console.log(returnNum.getNum());
    var CacheCount = (function () {
        var cache = {};
        return {
            getCache: function (key) {
                if (key in cache) {// 如果结果在缓存中
                    return cache[key];// 直接返回缓存中的对象
                }
                var newValue = getNewValue(key); // 外部方法,获取缓存
                cache[key] = newValue;// 更新缓存
                return newValue;
            }
        };
    })();
    
    console.log(CacheCount.getCache("key1"));
    var person = function(){
        var name = "default";//变量作用域为函数内部,外部无法访问
        return {
            getName : function(){
                return name;
            },
            setName : function(newName){
                name = newName;
            }
        }
    }();
    
    console.log(person.name);// undefined
    console.log(person.getName());
    person.setName("wheeler");
    console.log(person.getName());
    function func(param) {
        return function() {
            console.log(param);
        }
    }
    var myFunc = func('wheeler');
    setTimeout(myFunc, 1000);

    相关推荐:

    js闭包是什么?对js闭包的理解(附代码)

    js闭包是什么?对js闭包的理解

    以上就是js中闭包的定义是什么?js闭包的应用场景的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:javascript
    上一篇:js中箭头函数的格式&this以及与普通函数的区别讲解 下一篇:浅析React组件的生命周期(代码解析)
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 一分钟理解js闭包_javascript技巧• js闭包引起的事件注册问题介绍_基础知识• Javascript学习笔记之 函数篇(三) : 闭包和引用_基础知识• 详谈JavaScript 匿名函数及闭包_javascript技巧• js闭包的用途详解_基础知识
    1/1

    PHP中文网