标签:style blog http color io 使用 java ar strong
1.即时函数的声明方法
(function () {
    var days = [‘Sun‘, ‘Mon‘, ‘Tue‘, ‘Wed‘, ‘Thu‘, ‘Fri‘, ‘Sat‘],
        today = new Date(),
        msg = ‘Today is ‘ + days[today.getDay()] + ‘, ‘ + today.getDate();
    alert(msg);
}()); // "Today is Fri, 13"
3.即时函数的参数
下面的例子展示了一个带参数的即时函数:
// prints:
// I met Joe Black on Fri Aug 13 2010 23:26:59 GMT-0800 (PST)
(function (who, when) {
    console.log("I met " + who + " on " + when);
}("Joe Black", new Date()));
有时,也可以把全局的this对象传给即时函数,这样就可以在不同的运行环境下复用即时函数中的代码:
(function (global) {
    // access the global object via `global`
}(this));
 当然,如果即时函数的参数比较多,而函数体又比较长的时候,你就需要上下来回的查看函数的参数列表定义和它的形参列表,这有时候挺烦人的。
4.即时函数的返回值
就如普通函数一样,即时函数也有返回值,可以把返回值赋给变量(注意,这里不是把函数对象赋值给变量):
var result = (function () {
    return 2 + 2;
}());
如果把包在即时函数外的括号去掉,其效果完全相同。这种语法更简洁,但容易让人以为是把函数对象赋值给了变量,事实上变量得到的是函数的返回值:
var result = function () {
    return 2 + 2;
}();
 由于上面提到,即时函数有两种写法,所以下面的代码在效果上,与上面的两种写法完全相同:
var result = (function () {
    return 2 + 2;
})();
这三个例子返回的都是原始数据类型。实际上即时函数可以返回任何数据,包括函数对象:
var getResult = (function () {
    var res = 2 + 2;
    return function () {
        return res;
    };
}());
由于利用即时函数可以提供一段独立的局部作用域,最后还有返回值,所以也有人喜欢给对象的属性赋初始值的时候使用即时函数:
var o = {
    message: (function () {
        var who = "me",
            what = "call";
        return what + " " + who;
    }()),
    getMsg: function () {
        return this.message;
    }
};
// usage
o.getMsg(); // "call me"
o.message;  // "call me"
 上面的例子里,message是一个string类型的属性,而不是一个方法。
5. 即时函数的使用
即时函数提供局部的变量作用域,不会污染全局环境,同时其中的代码又能立即执行,所以经常用在模块化的程序中。如果我们把每一个功能 独立的代码段都用即时函数来组织,并放到一个单独的js文件中,那我们什么时候想使用,就把这个js文件引入进来就可以了:
// module1 defined in module1.js
(function () {
  // all the module 1 code ...
}());
http://zihui.lin.blog.163.com/blog/static/7292115420126335225160/
JavaScript基础-即时函数(Immediate Functions)
标签:style blog http color io 使用 java ar strong
原文地址:http://www.cnblogs.com/Bryran/p/3964751.html