美文网首页Web前端之路
JS不想写分号?那你得注意下这个

JS不想写分号?那你得注意下这个

作者: 哪树繁花 | 来源:发表于2017-11-16 09:37 被阅读29次

问题

今天在测试代码的时候出现了一个让我有点摸不着头脑的事儿

function fn1 () {
    console.log('fn1')
}

fn1()

(function(){
    console.log('fn2')
})()

按理说应该是理所当然的输出 fn1 和 fn2,但其实是在控制台报了错:Uncaught TypeError: fn1(...) is not a function,瞎说什么?fn1怎么会不是一个function?但仔细一看人家说的是fn1(...) is not a function

分析

首先代码应该没有问题,以前应该也写过类似的东西,唯一不同的就是跟以前相比,现在不是很喜欢写分号了,问题可能就出在这,给fn1()后面加上分号果然就没报错了。这样一来,也就能说得通了,fn1()后面没有分号,而紧接其后的又是一个括号(),不管里面内容是什么,他都被解析成了对fn1()函数的调用,也就是fn1()(),所以才会说fn1(...) is not a function

那这样的话,不仅仅是匿名函数自调用,其他任何直接用到()的地方应该都会出现这种问题

// 这里会报错:2 is not a function
var a = 2
(function(){
    console.log('fn')
})

总结

直接使用()切前面没有分号时,代码都会被解析为一次函数的调用。
虽然不用每次都写分号,但还是要注意场合,也去网上查了一下这个问题,解决的办法是在需要用到匿名函数自调用的地方提前加一个分号

var a = 2

;(function(){
    console.log('fn')
})

相关文章

  • JS不想写分号?那你得注意下这个

    问题 今天在测试代码的时候出现了一个让我有点摸不着头脑的事儿 按理说应该是理所当然的输出 fn1 和 fn2,但其...

  • Javascript第二章中for循环第四课

    主要对数组进行遍历 注:这三个表达式的内容可以不写,但是分号得写。 源码

  • js

    js的编写位置: js注释 1.JS中严格区分大小写2.JS中每一条语句以分号(;)结尾如果不写分号,浏览器会自动...

  • 分号问题+函数中的this

    这篇文章写2个知识点:分号问题和函数中的this。 分号问题 js语句的后面可以不加分号 是否加分号是编码风格问题...

  • day5--js基础

    JS基础 // 1.语句// a.js语法上,一条语句结束可以写分号也可以不写...

  • js基础概念 简记

    语句:js中语句可不用分号结尾 var a = 3 声明前置: 变量申明前置和函数申明前置 注释: // 单行注...

  • JavaScript 最佳实践

    语法 分号 记得在语句后面加分号 Linting JS Lint 最古老 JS Hint 是JS Lint的一个F...

  • js基础——使用方式

    一、使用方式: 1.1、使用script标签,在标签内写js语句(注意:每句都加分号;) 1.2、使用js文件:在...

  • 2018-08-18 day05 js基础

    JS基础语法 js中的注释 2.语句 一条语句结束需要加分号(现在的js版本也可以不用写) 一行写多条语句必须使用...

  • 代码规范

    1、如果不是明确要求不用加分号的规范,比如.vue文件,JS后面分号一定要加上。2、 3、常量尽量不要放到写变量的...

网友评论

    本文标题:JS不想写分号?那你得注意下这个

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