js闭包

作者:ole3021
链接:https://www.zhihu.com/question/40338254/answer/86365070
来源:知乎

在说到JS的变量和方法管理通过闭包(闭包 - JavaScript)来实现,而闭包在JS中最常用的方法是模块(Modules),通过模块来定义私有的变量和方法(模块通过共有的api来提供外部访问)。

举个 栗子:
function User(){
    var username, password;

    function doLogin(user,pw) {
        username = user;
        password = pw;

        // do the rest of the login work
    }

    var publicAPI = {
        login: doLogin
    };

    return publicAPI;
}
在JS中创建一个User的新实例的时候使用下面的方法。
var admin = User();

admin.login("admin", "password");

这样的好处是 User 作为外部的一个作用域保留了变量(username 和 password)以及方法(doLogin()),这里的变量和方法都是私有的方法,不能从外部访问到。

调用User()方法 就能够获得一个新的User实例,这个新的实力和新的作用域(包含了User的内部属性和方法)

***
不使用new User() 来创建是有目的这么做的
1. User是一个方法,不是一个可以实例化的“类”。
2. 使用new 方法会消耗更多的资源。
原文地址:https://www.cnblogs.com/zjdeblog/p/6652158.html