js两个自执行函数报错?

发布于 2022-09-12 22:12:38 字数 578 浏览 18 评论 0

报错情况

// 两个自执行函数,放在一个script标签中,报错

<script>
 (function (){
        var a=1
 console.log(a);
 })()
            
    (function (){
        var b=2
 console.log(b);
 })()
    
</script>

image.png

正常情况

这样就不会报错,为什么?

<script>
 (function (){
        var a=1
 console.log(a);
 })()
</script>
<script>
 (function (){
        var b=2
 console.log(b);
 })()
</script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我不是你的备胎 2022-09-19 22:12:38

这种就属于js 中不可忽略分号的场景,因为在语法分析阶段就出现了错误。

如果你补全第一个自动执行函数的分号,这段代码将会正常运行。

当然,也不一定使用分号,你还可以在每个自执行函数前面加上!、以及其他普通算术运算符+ - * /。

另外你会发现一些第三方类库大多都会在开头写上 ! 或者; ,就是为了避免在一些压缩合并后的 js 出现上面的错误。

!(function(){
//  some code
})()
杀手六號 2022-09-19 22:12:38

看起来换行了,实际编译的时候是连在一起的。就变成了(fn)()(fn)(),不停的执行上一个的结果。
加了分号给他断句就行了。(fn)();(fn)()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文