Javascript 中的立即调用函数表达式 (IIFE) 用例
Immediately Invoked Function Expression (IIFE) use case in Javascript
我知道 IIFE 是用来防止污染全局名称的 space。我不明白的是,假设您有一个共享相同名称的变量,如果您要在给定函数内使用关键字 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 有什么意义?
IIFE 的要点,可以(应该 - 虽然 )也可以写成
(function () {
// ^ anonymous
var firstName = "bobby";
console.log(firstName);
})();
就是不在全局范围内引入name
。在您的第一个示例中,您可以调用 name()
两次或多次调用。
如果函数是非 IIFE 函数则必须调用函数,如果是 IIFE 函数则不需要调用函数创建后立即执行。
我知道 IIFE 是用来防止污染全局名称的 space。我不明白的是,假设您有一个共享相同名称的变量,如果您要在给定函数内使用关键字 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 有什么意义?
IIFE 的要点,可以(应该 - 虽然
(function () {
// ^ anonymous
var firstName = "bobby";
console.log(firstName);
})();
就是不在全局范围内引入name
。在您的第一个示例中,您可以调用 name()
两次或多次调用。
如果函数是非 IIFE 函数则必须调用函数,如果是 IIFE 函数则不需要调用函数创建后立即执行。