《众妙之门——JavaScript与jQuery技术精粹》——1.5 匿名函数和模块模式

本节书摘来自异步社区《众妙之门——JavaScript与jQuery技术精粹》一书中的第1章,第1.5节,作者: 【德】Smashing Magazine译者: 吴达茄 芮鹏飞 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.5 匿名函数和模块模式

JavaScript最令人烦恼的事情是变量的范围没有定义。任何在函数外定义的变量、函数、数组和对象都是全局的,这意味着相同页中的其他脚本都可以进行调用,因而经常出现参数被覆盖现象。

解决方法就是将变量封装在一个匿名函数中,在定义完函数后立即调用。例如,下例将生成三个全局变量和两个全局函数:
《众妙之门——JavaScript与jQuery技术精粹》——1.5 匿名函数和模块模式

该页中其他的脚本语句如果含有名为status的变量的话就会出问题。如果将它们封装在名为myApplication的匿名函数中,就可以解决这个问题了:
《众妙之门——JavaScript与jQuery技术精粹》——1.5 匿名函数和模块模式

但是这样定义使得参数在函数外不起作用,如果这正是所需要的,没有问题。另外可以省略定义的名字。
《众妙之门——JavaScript与jQuery技术精粹》——1.5 匿名函数和模块模式

但如果需要部分变量或函数可被外部调用,则需要这样改写程序:为了可以调用createMember()或getMemberDetails()函数,将它们作为myApplication的属性返回。
《众妙之门——JavaScript与jQuery技术精粹》——1.5 匿名函数和模块模式

这样的用法被称为模块模式或单例模式。Douglas Crockford多次提到过这个概念,Yahoo用户接口函数库YUI中经常使用它。为了使函数和变量可以被外部调用,需要改变定义的语法,这很令人烦恼。而且,如果要从一个方法中调用另一个方法,还必须在调用时加上myApplication前缀。因此,我更倾向于返回这些我想要其成为全局元素的元素的指针,这样还可以缩短外部调用时的使用长度。
《众妙之门——JavaScript与jQuery技术精粹》——1.5 匿名函数和模块模式

我将这种方法称为“揭示模块模式”。

上一篇:非关系型数据库redis、memcached对比


下一篇:【榜单】GitHub 最受欢迎深度学习应用项目 Top 16(持续更新)