通常一个自执行的闭包函数是这样的
(function(this,$){
...
}(window,jQuery))
等同于下面写法
!function(this,$){
...
}(window,jQuery)
兼容node环境 或者amd写法 和window写法
举一个小李子:
先定义一个circle.js,暴露两个公共函数给外部调用
!function(root,fn){
if (typeof exports === 'object') {
// Node.
module.exports = fn.call(root);
} else if (typeof define === 'function' && define.amd) {
// 定义一个匿名模块
define(function(){ return fn.call(root) });
} else {
// Browser globals (root is window)
root.circle = fn.call(root);
}
}(this,function(){
var PI=Math.PI;
//面积计算方法
var area=function(r){
return PI * r * r;
}
//周长计算方法
var circumference = function (r) {
return 2 * PI * r;
};
return {
area:area,
circumference:circumference
}
})
app.js 调用circle中的方法
!function(root,fn){
if (typeof exports === 'object') {
module.exports = fn.call(root,require("./circle.js"));
} else if (typeof define === 'function' && define.amd) {
//定义一个circle模块加异步下载circle.js 加载完成执行回调
define(["circle"],function(c){ return fn.call(root,c) });
} else {
root.circle = fn.call(root,circle);
}
}(this,function(c){
console.log(c.area(4))
})
写一个index.html 跑一下
这是node环境和window环境引用两个文件
<script src="circle.js"></script>
<script src="app.js"></script>
如果需要用require异步加载文件,只需要引入一个require.js源文件就可以
<script data-main="app.js" src="require.js"></script>
然后我们在控制台就看到打印的结果了50.26548245743669
网友评论