2017-04-04 63 views
1

我得知IIFE用于防止污染全局名称空间。我不明白的是,假设你有一个共享相同名称的变量,如果你要在一个给定函数内使用关键字var来声明一个变量,那么在运行时函数被调用时无关紧要时间? 我可能使它听起来比它更复杂的,但看看下面的代码块:立即在Javascript中调用函数表达式(IIFE)用例

例1:没有IIFE

var firstName = "eugene"; 
 

 
function name(){ 
 
    var firstName = "bobby"; 
 
    console.log(firstName); 
 
} 
 
name(); //bobby 
 

 
console.log(firstName); //eugene

示例2:使用IIFE

var firstName = "eugene"; 
 

 
(function(){ 
 
    var firstName = "bobby"; 
 
    console.log(firstName); 
 
})(); 
 

 
console.log(firstName);

例2输出基本相同的东西。使用IIFE的要点是什么?如果它将出现同样的事情?

+0

这个问题有很多例子已经在堆栈上。 http://stackoverflow.com/questions/14317998/immediately-invoked-function-expression-iife-vs-not – SoEzPz

+0

[名称IIFE和立即调用名称函数之间的区别?](http:// stackoverflow .com/q/15688420/1048572) – Bergi

+0

它只是一个被称为immedaitely的函数。为什么它需要有一个点?它做它做的事情。 –

回答

0

的IIFE的角度来看,这可能(应该 - 虽然the name doesn't hurt)也已经被写成

(function() { 
//  ^anonymous 
    var firstName = "bobby"; 
    console.log(firstName); 
})(); 

是在全球范围内不引入name。在第一个例子中,您可以根据需要调用name()两次或多次。

+0

糟糕,那是一个错字。 – ginop86

+0

啊,我明白你在说什么。 – ginop86

-1

如果函数是非IIFE的,你必须调用该函数,如果它是一个IIFE函数,则不需要该函数调用该函数在创建后立即执行。

+0

但是......根据定义,iife是......被称为......这不是一个区别。 –

相关问题