【问题标题】:What is the purpose of a semicolon before an IIFE? [duplicate]IIFE 前的分号有什么作用? [复制]
【发布时间】:2013-07-31 19:10:44
【问题描述】:

我在查看has.js的代码,对这里的初始分号感到困惑:

;(function(g){
  // code
}()(this);

据我所知,它完全没有任何作用。它不会将函数置于()! 的表达式位置,执行:(function(){}())!function(){}()。它似乎只是空行的换行符。

这个分号的目的是什么?强迫症渴望在 IIFE 的开始和结束之间保持对称? :)

【问题讨论】:

    标签: javascript syntax


    【解决方案1】:

    它可以防止任何以前的代码将您的代码作为函数的参数执行。

    mybrokenfunction = function(){
    
    } //no semicolon here
    (function(g){
    
    
    })(this);
    

    将以您的匿名函数作为参数执行 mybrokenfunction:

    mybrokenfunction = function(){}(function(g){})(this);
    

    如果您可以保证在您的函数之前不会有未终止的(无分号)函数,您可以省略起始分号,但您不能,因此将多余的分号放入会更安全。

    【讨论】:

    • 主要用于防御连接 JavaScript 文件的网络工具。
    • 我最初在 2013 年回答了这个问题,现在我应该指出,现在大多数现代 javascript Web 工具都足够聪明,可以处理这个问题,并且在 ES2015 和更新版本中,有更好的封装,导致更少的 IIFE。我已经好几年不用IIFE了。
    猜你喜欢
    • 2023-03-18
    • 2015-11-01
    • 2014-10-13
    • 2022-01-06
    • 2010-12-24
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多