闭包和模块有什么区别?

时间:2015-11-20 11:40:00

标签: javascript function

我知道像这样的模块:

function User(){
    var username, password;

    function doLogin(user, pw){
        username = user;
        password = pw;
    };
    var publicAPI = {
        login: doLogin
    };
    return publicAPI;
}

在其中有一个闭包:doLogin,并且正在记住username内的变量passwordUser的值,这是一个“闭包”。我不太明白的是,无论何时我们使用闭包,我们都在使用模块模式?或者一旦我将User的函数保存在像var User = function(){...之类的变量中就不是一个模块......请记住我正在学习js。

2 个答案:

答案 0 :(得分:5)

您已为=IIf([EmployeeValue]>0,"p",IIf([EmployeeValue]<0,"q","tu")) 实施了工厂功能。

你“几乎”使用了揭示模块模式。大多数人会说需要立即调用显示模块模式。模块模式通常用于代码组织。你在这里所拥有的是一个对象工厂。

(揭示)模块模式(和其他模块)使用闭包来实现私有状态的封装。

只要定义了函数,就会创建一个闭包。它们是JavaScript的语言特性,可以更轻松地处理函数。

答案 1 :(得分:0)

闭包是一种从封闭范围中关闭(或捕获)信息或状态的方法。基本上它是一种延长变量寿命的方法。

模块是一种隐藏外部世界的实现和状态的方法。

因此,doLogin()正在关闭usernamepassword,从而延长其生命周期。 publicAPI引用的对象隐藏了用户

doLogin()实现