即时函数JavaScript

dub*_*ech 12 javascript function iife

Stoyan Stefanov在JavasScript Patterns中说:"你需要一个直接的函数来将所有代码包装在其本地范围内,而不是将任何变量泄漏到全局范围"第70页.

这是他的榜样

(function() {
    var days = ['Sun','Mon'];
    // ...
    // ...
    alert(msg);
}());
Run Code Online (Sandbox Code Playgroud)

但肯定是因为天被定义为var,它只是功能范围?立即函数的唯一好处是立即调用函数.没有范围优势.Corrcet?

SRe*_*ect 13

如下所示,它不是关于立即执行的函数与常规函数的关系; 事实上,它几乎没有任何关系.

包装功能的唯一目的是防止创建事物(甚至暂时在全局范围内):

(function() {
    // This variable is only available within this function's scope
    var thisIsTemp = "a";

    // ...
}());

console.log(thisIsTemp); // undefined        
Run Code Online (Sandbox Code Playgroud)

VS:

// This variable is available globally
var thisIsTemp = "a";

// ...

console.log(thisIsTemp); // "a"
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是最好的答案.不是立即封闭功能与正常封闭功能的情况.它是即时功能而不是封闭功能.只是香草JavaScript. (2认同)

lan*_*nzz 6

days变量放在函数范围内正是示例所做的.如果没有立即调用的函数,所有变量(days,msg)都将是全局变量,并将污染全局名称空间.


Jon*_*Jon 6

从技术上讲,这是正确的(没有范围的好处,因为函数是立即的;一个普通的无聊函数也会这样做),但不要忘记

  1. 你有一些代码要运行,现在
  2. 您不希望该代码将名称泄漏到当前范围中

因此,该函数由于#2 创建,由于#1也会立即调用它.