【JS】利用闭包实现JS的简单模块

JS模块是啥

  • 具有特定功能的JS文件
  • 将所有的功能和数据封装在一个函数的内部,即数据和功能都是私有的
  • 只向外部暴露一个包含n个方法的对象或函数
  • 模块的使用者只能通过模块主动暴露的对象方法了来实现对应功能

自己定义一个简单的JS模块

myModule.js:

function myModule(){
    //私有数据
    var msg = 'My JS Module'
    //内部方法
    function doUpper(){
        console.log('doUpper(): ' + msg.toUpperCase())
    }
    function doLower(){
        console.log('doLower(): ' + msg.toLowerCase())
    }
    //向外暴露
    return {fn1:doUpper, fn2:doLower}
}

main.js

var M = myModule()
M.fn1() //打印出doUpper(): MY JS MODULE
M.fn2() //打印出doLower(): my js module

这怎么就用到了闭包

  • 在 main.js 中,使用了一个全局变量M去接收myModule.js的函数的返回值,此时相当于变量M拥有了myModule.js里面的函数的方法,这就满足了闭包的定义了
  • main.js的全局执行上下文中本身不存在"My JS Module"这句话,但是在myModule.js的函数中中定义的两个方法时,main.js的全局变量M引用了这个函数对象,所以可以在内存中找到这句话,并进行处理后打印到控制台上

你可能感兴趣的:(【JS】利用闭包实现JS的简单模块)