首页 > 代码库 > 【转】require.js学习笔记(一)

【转】require.js学习笔记(一)

一、立即执行函数

for (var i = 0; i < elems.length; i++) {    (function (lockedInIndex) {          elems[i].addEventListener(‘click‘, function (e) {            e.preventDefault();            alert(‘I am link #‘ + lockedInIndex);        }, ‘false‘);    })(i); //入参}
使用立即执行函数,可以达到不暴露私有成员的目的
var module1 = (function(){    var _count = 0;    var m1 = function(){      //...    };    var m2 = function(){      //...    };    return {      m1 : m1,      m2 : m2    };  })();  //无法读取_count    
 
对比立即执行函数
<!DOCTYPE html><html lang="en"><head>	<meta charset="UTF-8">	<title>Document</title></head><body>	<script> 	var a = function() { 		alert(12) 		var _count=1;        var m1 = function(){      alert(1);    };    var m2 = function(){      alert(2);    };    return {      m1 : m1,      m2 : m2    }; 	};     var b = a(); 	b.m1(); 	var a2 = (function() { 		alert(12); 		var _count=1;        var m1 = function(){      alert(1);    };    var m2 = function(){      alert(2);    };    return {      m1 : m1,      m2 : m2    }; 	})(); 	a2.m2(); 	</script></body></html>
 

二、模块规范

目前主要的模块规范有commonJS与AMD
 

1.commonJS

commonJS是服务器端模块规范,nodeJs遵循此规范。因为服务端JS文件存放于本地,加载速度快,所以其加载模块(一个文件即一个模块)方式为同步加载,不适用于浏览器。
function foobar(){        this.foo = function(){                console.log(‘Hello foo‘);        }        this.bar = function(){                console.log(‘Hello bar‘);        }} exports.foobar = foobar; //通过export实现与外部通信
var foobar = require(‘./foobar‘).foobar,    test   = new foobar(); test.bar(); 
2.AMD采用异步加载模块,加载完成后通过回调函数实现相应操作,适用与浏览器。
require([‘math‘], function (math) {    math.add(2, 3);  });


 
 
 
 
原文地址:
http://www.ruanyifeng.com/blog/2012/10/javascript_module.html
 
http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html
http://javascript.ruanyifeng.com/nodejs/commonjs.html

【转】require.js学习笔记(一)