为了账号安全,请及时绑定邮箱和手机立即绑定

函数闭包"}());"有区别吗 和 })();

函数闭包"}());"有区别吗 和 })();

达令说 2022-12-09 13:53:20
我检测到我犯了一个错误并使用了“}());” 代替 ”})();” 并且代码工作得很好,这就是它未被发现的原因。我想知道是否有区别?由于复制和粘贴,这个错误出现在很多单独的脚本中,这让我很担心但很困惑,因为 ESLint 没有抱怨。我试图找到答案,但谷歌在搜索“}())时没有给出任何结果;” 和“javascript 错误的函数闭包”给出的结果暗示它们是相同的,没有区别。函数如下所示:const fname = (function() {   const cached_func = ...;   return function(p1, p2) {     ...     return cached_func.apply(this, arguments)  };}()); <- The error
查看完整描述

3 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

是的,区别在于将您的functionwithin(和)标记括起来会使您的语句返回所述函数,就好像您通过它的名称调用它一样。因此,您可以附加()并立即执行它。


以下两个语句产生相同的结果:


// 1

function myFunction(){

    console.log("1")

}

myFunction();


// 2

(function myFunction(){

    console.log("1")

})()

不可能在右括号之后立即调用函数,因为它会导致错误Unexpected token ')':


function myFunction(){

    console.log("1")

}() // Uncaught SyntaxError: Unexpected token ')'


查看完整回答
反对 回复 2022-12-09
?
慕容708150

TA贡献1831条经验 获得超4个赞

将函数包裹在括号“()”中的目的是命名空间和控制成员函数的可见性。

它将您的代码包装在函数范围内。

其中 '()' 后跟函数声明是立即调用通常称为 IIFE 的函数


查看完整回答
反对 回复 2022-12-09
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

这两种形式在功能上是相同的。这纯粹是您喜欢的风格选择。

进一步阅读这里


查看完整回答
反对 回复 2022-12-09
  • 3 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信