NodeJS
对于写在HTML页面里的JS,浏览器充当了解析器的角色。而对于需要独立运行的JS,NodeJS就是一个解析器.
NodeJS的作者说,他创造NodeJS的目的是为了实现高性能Web服务器,他首先看重的是事件机制和异步IO模型的优越性,而不是JS.
模块化 模块就是实现特定功能的一组方法。只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块。简单理解为封装
下述两种写法等价

exports 对象是当前模块的导出对象,用于导出模块公有方法和属性。别的模块通过require函数使用当前模块时得到的就是当前模块的exports对象
//声明一个函数
var math = function(a, b) {
return a+b;
}
/*
* exports对象是当前模块的导出对象,用于导出模块公有方法和属性。
* 别的模块通过require函数使用当前模块时得到的就是当前模块的exports对象
*/
exports.math = math;
require require函数用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。

(说明:NodeJS与requireJS区别 NodeJS没有最外层的Wrapper包装 define(function(require, exports){}))
requireJS写法
/*
* 选项卡切换功能模块
* Author: Avenstar
* 2017/2/16
*
* require函数用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。
* exports对象是当前模块的导出对象,用于导出模块公有方法和属性。
* 别的模块通过require函数使用当前模块时得到的就是当前模块的exports对象。
*/
define(function(require, exports){
//声明一个switchTab对象
var switchTab = {};
//初始化
switchTab.initMain = function(){
//初始化事件
switchTab.init_event();
}
//初始化
switchTab.init_event = function(){
var $menuTab = $(‘#switch-tab‘),
$tabCont = $(‘.switch-tab-content‘).find(".tab-content");
$menuTab.on(‘click‘, ‘li‘, function(e){
var $that = $(this),
target = $that.attr("target"); //对目标内容
//添加样式
$that.addClass(‘active‘).siblings().removeClass(‘active‘);
$tabCont.each(function(){
var $_that = $(this),
tabTarget = $_that.attr(‘data-target‘); //选项卡对应内容
if(target == tabTarget){ //选项卡与目标元素对应
$_that.removeClass(‘hide‘);
}else{
$_that.addClass(‘hide‘);
}
})
})
}
//暴露switchTab方法
exports.init = switchTab.initTab;
})
【资料参考】
https://cnodejs.org/getstart
http://www.ruanyifeng.com/blog/2012/10/javascript_module.html
http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html
http://www.ruanyifeng.com/blog/2012/11/require_js.html
原文:http://www.cnblogs.com/zjf-1992/p/6403111.html