美文网首页
立即执行函数的 N 种写法

立即执行函数的 N 种写法

作者: sunxiaochuan | 来源:发表于2018-08-30 20:09 被阅读0次

    出处

    函数 - JavaScript 教程 - 网道 ---- 立即调用的函数表达式(IIFE)

    代码

    (function(){ /* code */ }());
    // 或者
    (function(){ /* code */ })();
    

    以圆括号开头,引擎就会认为后面跟的是一个表示式,而不是函数定义语句

    • 任何让解释器以表达式来处理函数定义的方法,都能产生同样的效果,比如下面三种写法。
    var i = function(){ return 10; }();
    true && function(){ /* code */ }();
    0, function(){ /* code */ }();
    
    • 甚至像下面这样写,也是可以的。
    !function () { /* code */ }();
    ~function () { /* code */ }();
    -function () { /* code */ }();
    +function () { /* code */ }();
    
    • 通常情况下,只对匿名函数使用这种“立即执行的函数表达式”。它的目的有两个:一是不必为函数命名,避免了污染全局变量;二是 IIFE 内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。
    // 写法一
    var tmp = newData;
    processData(tmp);
    storeData(tmp);
    
    // 写法二
    (function () {
      var tmp = newData;
      processData(tmp);
      storeData(tmp);
    }());
    

    上面代码中,写法二比写法一更好,因为完全避免了污染全局变量。

    相关文章

      网友评论

          本文标题:立即执行函数的 N 种写法

          本文链接:https://www.haomeiwen.com/subject/fwgdwftx.html