即时函数

287 阅读2分钟

上一篇我们讨论了匿名函数在回调方面的应用,接下来,我们来看匿名函数的另一个应用--即时函数。

function() {
         alert('boo');   
    }
)();

它的语法其实很简单,我们只需要将匿名函数的定义放在一对括号中,然后括号外面再紧跟一对括号即可。其中,第二对括号起到的是“立即调用”的作用,同时它也是我们向匿名函数传递参数的地方。

(
    function(name) {
        alert('Hello ' + name + " !" );
    }
)('dude');

//当然下面这样写也是可以的
//即将第一对括号闭合于第二对括号之后
(function(name){
    alert('Hello ' + name + ' !' )
}('dude'));

使用 即时(自调)匿名函数的好处是不会产生任何全局变量,当然,缺点在于这样的函数是无法重复执行的(除非你将它放在某个循环或其他函数中)。这也使得即时函数非常适合于执行一些一次性的或初始化的任务。

如果需要的话,即时函数也可以有返回值,虽然并不常见:

var result = (function(){
    alert('I have result !');
    return 1;
}());

result;    //1

当然在这个例子中,将整个函数表达式用括号包起来是不必要的,我们只要在函数最后,使用一对括号来执行这个函数即可,所以上面的例子又可以改为:

var result = function(){
    alert('I have result !');
    return 1;
}();

result;    //1

虽然这种写法也有效,但可读性就毕竟稍微差点,不读到最后,你就无法知道 result 到底是一个 函数,还是一个 即时函数 的 返回值。

本文摘自《JavaScript面向对象编程指南》,分享的目的仅供个人学习和理解,如需转载请备注本文出处,谢谢!