兼容各版本的闭包函数

通常一个自执行的闭包函数是这样的

(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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在线阅读 http://interview.poetries.top[http://interview.poetr...
    前端进阶之旅阅读 115,166评论 24 450
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 8,983评论 2 41
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 12,114评论 2 19
  • 转载 前端开发面试题 <a name='preface'>前言</a> 本文由我收集总结了一些前端面试题,初学者阅...
    小九喵喵阅读 3,332评论 0 0
  • 说实话,在提交这个申请的时候,我是既紧张又惶恐,想做好但是又担心,怕做不好,但是写着写着,就释然了,敢于尝试,去做...
    4063697d90d9阅读 1,937评论 0 0