我检测到我犯了一个错误并使用了“}());” 代替 ”})();” 并且代码工作得很好,这就是它未被发现的原因。我想知道是否有区别?由于复制和粘贴,这个错误出现在很多单独的脚本中,这让我很担心但很困惑,因为 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 ')'

慕容708150
TA贡献1831条经验 获得超4个赞
将函数包裹在括号“()”中的目的是命名空间和控制成员函数的可见性。
它将您的代码包装在函数范围内。
其中 '()' 后跟函数声明是立即调用通常称为 IIFE 的函数
添加回答
举报
0/150
提交
取消