前端待看

匿名函数和模块化

2016-10-18  本文已影响91人  GTReload

匿名函数

function outputNum() {
    for (var i = 0; i < 5; i++) {
        
    }
    alert(i);//5
}
或
function outputNum() {
    for (var i = 0; i < 5; i++) {
        
    }
    var i;
    alert(i);//5
}

在js中,变量在它定义处开始,就可以在函数内部随处访问它,即使重新申明,值也不会改变。

匿名函数可以用来模仿块级作用域避免这问题

//匿名函数申明
(function () {
    //这里是块级作用域
})();

下面这种写法报错

function outputNum(count) {
    (function () {
        for (var i = 0; i < 5; i++) {
        
        }
    })();
    alert(i);//报错
}

所以,匿名函数一般用在全局作用域中的函数外部,限制向全局作用域中添加过多的变量或函数,从而产生命名冲突污染。

那匿名函数和模块化有什么联系呢?

模块化

模块化定义:如果创建一个对象并以某些数据进行初始化,同时还要公开一些能够访问这些私有数据的方法,就可称为模块化,就像C++/java中的类。

下面展示模块化的几种写法:

var Module = (function () {
    var count = "abc";
    var m1 = function () {
        count = count + "m1";
        console.log(count);
    };
    var m2 = function () {
        count = count + "m2";
        console.log(count);
    };
    return {
        count: count,
        m1: m1,
        m2: m2
    };
})();
var Module = (function (mod) {
    mod.m3 = function () {
        mod.count = mod.count + "m3";
        console.log(mod.count);
    };
    return mod;
})(Module);
var Module = (function (mod) {
    mod.m3 = function () {
        mod.count = mod.count + "m3";
        console.log(mod.count);
    };
    return mod;
})(window.Module || {});
var Module = (function ($,window) {
    
})(jQuery,window);
上一篇下一篇

猜你喜欢

热点阅读