美文网首页
兼容各版本的闭包函数

兼容各版本的闭包函数

作者: 水墨小龙虾 | 来源:发表于2017-03-03 19:46 被阅读0次

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

    (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

    相关文章

      网友评论

          本文标题:兼容各版本的闭包函数

          本文链接:https://www.haomeiwen.com/subject/wjvrgttx.html