我已经阅读了一个感兴趣的博客,其中应用了上述技术,我知道它将运行该功能本身。但是,当我尝试使用console.log时,变量的目的是 undefiend 。
var test1 = (function(){
console.log('yay')
})();
console.log(test1)
下面这样做的差异是什么
(function test1(){
console.log('yay');
})();
建议表示赞赏。 :)
答案 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
赋给变量counter
。 counter()
的连续调用将导致1,2等,同时隐藏i
。
这大致相当于将i
声明为私有的面向对象方法。