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, 成都, 上海