Module模式
2016-01-27 10:26
134 查看
匿名函数闭包
(function () {
// ... all vars and functions are in this scope only
// still maintains access to all globals
}());
注意在匿名函数外面的括号。这是由于在JavaScript中以function开头的语句通常被认为是函数声明。
加上了外面的括号之后则创建的是函数表达式。
全局导入
JavaScript有一个特征叫做隐藏的全局变量。当一个变量名被使用,编译器会向上级查询用var来声明这个变量的语句。如果没有找到的话这个变量就被认为是全局的。如果在赋值的时候这样使用,就会创建一个全局的作用域。这意味着在一个匿名的闭包中创建一个全局变量是十分容易的。不幸的是 ,这将会导致代码的难以管理,因为对于程序员来说,如果全局的变量不是在一个文件中声明会很不清晰。幸运的是 ,匿名函数给我们另一个选择。我们可以将全局变量通过匿名函数的参数来导入到我们的代码中,这样更加的快速和整洁。
在Javascript中只有程序和函数才会创建新的作用域,if 语句之类的不会
(function ($, YAHOO) {
// now have access to globals jQuery (as $) and YAHOO in this code
}(jQuery, YAHOO));
Module导出
有时你并不想要使用全局变量,但是你想要声明他们。我们可以很容易通过匿名函数的返回值来导出他们。关于Module模式的基本内容就这么多,这里有一个复杂一点的例子。
var MODULE = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}());
这里我们声明了一个全局的module叫做MODULE,有两个公有属性:一个叫做MODULE.moduleMethod的方法和一个叫做MODULE.moduleProperty的变量。另外他通过匿名函数的闭包来维持私有的内部状态,当然我们也可使用前面提到的模式,轻松导入所需的全局变量
(function () {
// ... all vars and functions are in this scope only
// still maintains access to all globals
}());
注意在匿名函数外面的括号。这是由于在JavaScript中以function开头的语句通常被认为是函数声明。
加上了外面的括号之后则创建的是函数表达式。
全局导入
JavaScript有一个特征叫做隐藏的全局变量。当一个变量名被使用,编译器会向上级查询用var来声明这个变量的语句。如果没有找到的话这个变量就被认为是全局的。如果在赋值的时候这样使用,就会创建一个全局的作用域。这意味着在一个匿名的闭包中创建一个全局变量是十分容易的。不幸的是 ,这将会导致代码的难以管理,因为对于程序员来说,如果全局的变量不是在一个文件中声明会很不清晰。幸运的是 ,匿名函数给我们另一个选择。我们可以将全局变量通过匿名函数的参数来导入到我们的代码中,这样更加的快速和整洁。
在Javascript中只有程序和函数才会创建新的作用域,if 语句之类的不会
(function ($, YAHOO) {
// now have access to globals jQuery (as $) and YAHOO in this code
}(jQuery, YAHOO));
Module导出
有时你并不想要使用全局变量,但是你想要声明他们。我们可以很容易通过匿名函数的返回值来导出他们。关于Module模式的基本内容就这么多,这里有一个复杂一点的例子。
var MODULE = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}());
这里我们声明了一个全局的module叫做MODULE,有两个公有属性:一个叫做MODULE.moduleMethod的方法和一个叫做MODULE.moduleProperty的变量。另外他通过匿名函数的闭包来维持私有的内部状态,当然我们也可使用前面提到的模式,轻松导入所需的全局变量
相关文章推荐
- Amr and Chemistry---cf558C(暴力,加技巧)
- Source Multiplayer Networking【转】
- java内存分配问题详解
- Android WebView使用经验总结
- input 全新属性
- 超图对接伟景航osg数据使用说明
- iOS 插件开发
- Linux系统中的异常堆栈跟踪简单实现
- 生成android证书
- 【Java多线程】之二:synchronized详解
- Houdini Pyro流体的插值变速
- 【摘】linux中fstab解说
- 查找数据库中某一列名
- 八一八可重用工作流(权当学习记录)
- jQuery Easyui学习之datagrid 动态添加、移除editor
- Linux 下 C++ 异常处理技巧
- 引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常 解决办法
- JavaEE web.xml 中ContextLoaderListener的解析
- 有用的学习网站链接
- hdu 4143(分解质因数)