我知道IIFE用于防止污染全局名称空间。我不明白的是假设你有一个共享相同名称的变量,如果要使用给定函数内部的关键字var
声明变量,那么函数何时无关紧要是在运行时调用的?
我可能听起来比它复杂,但请看下面的代码块:
示例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 :(得分:1)
IIFE的观点可能(应该 - 虽然the name doesn't hurt)也写成
(function () {
// ^ anonymous
var firstName = "bobby";
console.log(firstName);
})();
是不在全局范围内引入name
。在第一个示例中,您可以根据需要两次或多次调用name()
。
答案 1 :(得分:-1)
如果函数是非IIFE,则必须调用该函数,如果它是IIFE函数则不需要调用函数它在创建后立即执行。