通常一個(gè)自執(zhí)行的閉包函數(shù)是這樣的
(function(this,$){
...
}(window,jQuery))
等同于下面寫(xiě)法
!function(this,$){
...
}(window,jQuery)
兼容node環(huán)境 或者amd寫(xiě)法 和window寫(xiě)法
舉一個(gè)小李子:
先定義一個(gè)circle.js,暴露兩個(gè)公共函數(shù)給外部調(diào)用
!function(root,fn){
if (typeof exports === 'object') {
// Node.
module.exports = fn.call(root);
} else if (typeof define === 'function' && define.amd) {
// 定義一個(gè)匿名模塊
define(function(){ return fn.call(root) });
} else {
// Browser globals (root is window)
root.circle = fn.call(root);
}
}(this,function(){
var PI=Math.PI;
//面積計(jì)算方法
var area=function(r){
return PI * r * r;
}
//周長(zhǎng)計(jì)算方法
var circumference = function (r) {
return 2 * PI * r;
};
return {
area:area,
circumference:circumference
}
})
app.js 調(diào)用circle中的方法
!function(root,fn){
if (typeof exports === 'object') {
module.exports = fn.call(root,require("./circle.js"));
} else if (typeof define === 'function' && define.amd) {
//定義一個(gè)circle模塊加異步下載circle.js 加載完成執(zhí)行回調(diào)
define(["circle"],function(c){ return fn.call(root,c) });
} else {
root.circle = fn.call(root,circle);
}
}(this,function(c){
console.log(c.area(4))
})
寫(xiě)一個(gè)index.html 跑一下
這是node環(huán)境和window環(huán)境引用兩個(gè)文件
<script src="circle.js"></script>
<script src="app.js"></script>
如果需要用require異步加載文件,只需要引入一個(gè)require.js源文件就可以
<script data-main="app.js" src="require.js"></script>
然后我們?cè)诳刂婆_(tái)就看到打印的結(jié)果了50.26548245743669