JavaScript框架设计 一、种子模块

IIFE

   IIFE:立即执行函数表达式
IIFE一般用于构造私有变量,避免全局空间污染。

使用IIFE把计数器变量保存为私有变量更安全,同时也可以减少对全局空间的污染

var add = (function ()
{
    var count = 0;
    return function ()
    {
        return ++count;
    }
})();
console.log(add()); // 1
console.log(add()); // 2

匿名方法执行后,由于返回的方法在匿名方法作用域中,可以访问count变量,所以匿名方法执行环境不会被释放。

多次执行匿名方法,会生成多个函数执行环境,是独立的实例,如下:

// makeCounter函数返回的是一个新的函数,该函数对makeCounter里的局部变量i享有使用权
function makeCounter() {
  // i只是makeCounter函数内的局部变量
  var i = 0;
 
  return function() {
    console.log( ++i );
  };
}
 
// 注意counter和counter2是不同的实例,它们分别拥有自己范围里的i变量
 
var counter = makeCounter();
counter(); // 1
counter(); // 2
 
var counter2 = makeCounter();
counter2(); // 1
counter2(); // 2

IIFE的其他方式:

(function(){}());
(function(){})();
......

call,apply,bind

    var name = '小王', age = 17;
    var obj = {
        name: '校长',
        objage: this.age,
        fun: function (a, b)
        {
            console.log(this.name, this.age, a, b);
        }
    }
    var db = {
        name: 'admin',
        age: 129
    }
    obj.fun.call(db, '成都', '上海'); // admin, 129, 成都, 上海
    obj.fun.apply(db, ['成都', '上海']); // admin, 129, 成都, 上海
    obj.fun.bind(db)('成都', '上海'); // admin, 129, 成都, 上海
原文地址:https://www.cnblogs.com/zhuxiang1633/p/13374254.html