JavaScript的匿名函数和模块化的使用方法

6d6d 9年前

对于开发人员来说,很多时候我们都会涉及到 JavaScript 的使用,而在使用过程中,最令人沮丧的就是变量没有相应的使用范围。

在开发中,对于任何变量、数组、函数、对象等,只要不在函数的内部,都会被默认为是全局的,意味着页面上的其他脚本都可以访问它,并可进行重写覆盖。

对于不必要放在函数内部的变量,我们要如何保证不被其他代码访问并重写覆盖呢?这时就需要将变量放在一个匿名函数的内部,定义完后立即调用,例如,在JavaScript中按如下方式编写,将会产生三个全局变量和两个全局函数:

var name = 'Chris';

var age = '34';

var status = 'single';

function createMember(){

// [...]

}

function getMemberDetails(){

// [...]

}

上面这段代码中,还需注意变量名重复的问题,如果这个页面其他脚本上也有一个叫status的变量,为了区分,我们可以将它封装在一个 myApplication 里:

var myApplication = function(){

var name = 'Chris';

var age = '34';

var status = 'single';

function createMember(){

// [...]

}

function getMemberDetails(){

// [...]

}

}();

但是,这样一来,在函数外面就没有什么功能了。如果这是你需要的,那就可以了。你还可以省去函数的名称:

(function(){

var name = 'Chris';

var age = '34';

var status = 'single';

function createMember(){

// [...]

}

function getMemberDetails(){

// [...]

}

})();

如果你想在函数外面也能使用里面的东西,那就要做些修改。为了能访问 createMember() 或 getMemberDetails(),你需要把它们变成 myApplication的属性,从而把它们暴露于外部的世界:

var myApplication = function(){

var name = 'Chris';

var age = '34';

var status = 'single';

return{

createMember:function(){

// [...]

},

getMemberDetails:function(){

// [...]

}

}

}();

// myApplication.createMember() and

// myApplication.getMemberDetails() now works.

这被称作 module 模式或 singleton。但这样一来需要改变句式来使函数和变量能被外界访问甚至还需要加上myApplication 这个前缀。者貌似把简单东西复杂化了,很多开发人员并不喜欢这样做,而是更愿意简单的把需要能被外界访问的元素的指针导出来。这样做后,反倒简化了外界调用的写法:

var myApplication = function(){

var name = 'Chris';

var age = '34';

var status = 'single';

function createMember(){

// [...]

}

function getMemberDetails(){

// [...]

}

return{

create:createMember,

get:getMemberDetails

}

}();

//myApplication.get() and myApplication.create() now work.

以上就是 JavaScript开发 中,匿名函数和模块化的使用,算是脚本变量使用的一种小技巧,希望能对你在脚本的代码的开发中有所帮助。