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