欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于js闭包的作用实例讲解

程序员文章站 2022-04-25 20:03:41
在js中,闭包是一个重点,也是一个难点。因为闭包对像java这类语言的coder会觉得很生涩难懂,对初学的js的coder会感到难以理解,在这根据自己对闭包的一些浅显的理解分享出来。若有不对的地方,...

在js中,闭包是一个重点,也是一个难点。因为闭包对像java这类语言的coder会觉得很生涩难懂,对初学的js的coder会感到难以理解,在这根据自己对闭包的一些浅显的理解分享出来。若有不对的地方,望多多包含。

闭包

闭包,指的是在函数里的函数。(其实闭包就是被嵌套的那个函数)

function closebag(){
    function(){} // 这个匿名函数就是一个闭包
}

了解了什么是闭包之后,来认识一下闭包的作用。

作用一:获取函数内部的局部变量并将其驻留在内存中

在js中有函数作用域,在函数内通过var定义的变量,外部作用域无法直接获取。既然只是外部作用域无法获取。那么,它的子作用域便可以获取到,我们想将这个局部变量返回到外部作用域,那么便可以通过闭包完成该传递。

在这有人就会疑惑,如果只是需要获取函数内部的局部变量,直接将需要的局部变量return不就可以拿到了吗?的确,若只是需要获取局部变量,的确可以通过这种方式。但如果要实现计数功能,那么闭包使局部变量驻留在内存中的作用便显现了出来。

function closebag2(){
        var num = 22;
        // 通过闭包将举报变量返回到外部作用域
        return function() {
            return num++;
        }
    }

    var num = closebag2();

    console.log(num()); // 22
    console.log(num()); // 23
    console.log(num()); // 24
    console.log(num()); // 25

作用二:封闭作用域

通过自调用函数形成一个封闭作用域(相当于java的块级作用域),在该封闭作用域内,定义的变量和函数都是私有的,全局作用域并不能直接访问,但可以通过返回一个对象来获取该封闭作用域里的方法或变量。通常,我们利用这种封闭作用域来封装一些我们常用的方法库。

自调用函数写法: (function(){})()

封装库例子:
var utils = (function(){
        function add(){}
        function mul(){}
        function sub(){}

        return {
            add: add,
            mul: mul,
            sub: sub
        }
    })();

以上是我对闭包的浅显的理解,希望有大神指出我的不足和对闭包知识点的补充,万分感谢。