将函数分配给变量并运行自身

时间:2014-07-17 23:34:59

标签: javascript

我已经阅读了一个感兴趣的博客,其中应用了上述技术,我知道它将运行该功能本身。但是,当我尝试使用console.log时,变量的目的是 undefiend

var test1 = (function(){
    console.log('yay')
})();

console.log(test1)

下面这样做的差异是什么

(function test1(){
     console.log('yay');
})();

建议表示赞赏。 :)

2 个答案:

答案 0 :(得分:1)

在上面的示例中,函数是 void ,将函数结果赋给变量是没有意义的,因为它没有返回任何内容:

然而,稍微调整一下你的样本:

var test1 = (function(){
    console.log('yay'); return "hello";
})();

然后它才有意义,因为test1将返回"hello"

因此,在原始样本中没有差异,并且分配不返回值的函数的结果这一事实有点奇怪。

答案 1 :(得分:1)

Javascript中立即调用的函数表达式(IIFE)用于通过新范围引入闭包。这通常是为了弥补Javascript中缺少块范围或者提供隐藏la模块模式的信息(通常在jQuery插件中看到)。

下面的最小例子:

var counter = (function() {
    var i = 0;

    function inc() {
        i++;
        return i;
    }

    return inc;
})();

返回公开将函数inc赋给变量countercounter()的连续调用将导致1,2等,同时隐藏i

这大致相当于将i声明为私有的面向对象方法。