IT培训网-IT职场人学IT技术上IT培训网

编程硬核资料库,
随查随看随问答!

免费咨询 0元入学 助学贷款 就业保障 视频下载

怎么样学好JavaScript代码

提供专门助学计划,帮助快速进入IT行业,实现人生华丽转身

学IT技术,做互联网行业精英

怎么样学好JavaScript代码

0基础进入互联网行业的捷径

选择IT行业
就是选择更傲娇的人生

IT行业均薪领跑7大传统行业

  • 去年各行业月收入对比

  • 今年IT各技术方向行业平均薪资

去年各行业月收入对比

怎样快速入行IT技术 怎样快速入行

今年IT各技术方向行业平均薪资

怎么样学好JavaScript代码

哪些人更适合学IT技术?

12大热门IT技术课程,总有一个适合你

怎么样学好JavaScript代码

先就业后付款
怎么样学好JavaScript代码

IT培训网面向所有课程学员提供先就业后付款学习方案,保证学员稳定就业,可谓0学费!免除学习压力。

正文:

JavaScript 代码加不加分号有什么区别,怎么样学好JavaScript代码,容易学习吗?

这个问题在很多文章找那个都讨论过,在 ESlint 规范中也因为加不加分号而分为两大阵营,到于加不加分号,关键是需要了解分号对于 JavaScript 的影响,开始之前可以先看看这道面试题:

怎么样学好JavaScript代码_www.itpxw.cn

请问这段代码是否能够正常运行?


  1. var a = 1 
  2. (function() { 
  3.   console.log(2) 
  4. })() 

如果运行这段代码,会出现下面的错误:


  1. Uncaught TypeError: 1 is not a function 

什么鬼!1 is not a function ?我们没有打算运行数字 1,为什么说数字 1 不是函数,这种错误是很难找到原因的,经常会在出问题的代码行上打转。这个错误必然是上吗的代码在运行时被看作是同一行,其概念如下:


  1. var a = 1(function() { /* */ })() 

因此立即函数的 () 被附加在 1 上,这是一个调用函数的语法,所以会产生 1 is not a function 的错误,想要避免这个错误就需要使用分号:


  1. var a = 1 // 随便把分号放在哪里,只要能隔开就行 
  2. ;(function() { 
  3.   console.log(2) 
  4. })() 

ASI 自动加入分号

ASI是 “Automatic Semicolon Insertion” 的缩写,在运行时会往有些折行的代码中自动插入分号,这个机制可以使部分代码在没有加入分号时也能正常运行,比如下面的例子:


  1. var b = 1 
  2. ++b 
  3. console.log('b', b) 

由于代码中的 ++ 属于一元表达式,它只能在表达式的左边或右边放置变量,如果没有 ASI 的机制,代码会被转换为 var b = 1 ++ b 这样的错误语句。不过好在有 ASI,在实际运行时会自动被加入分号,也就不会出现上面的错误。


  1. var b = 1; 
  2. ++b; 
  3. console.log('b', b); // 2 

return 与分号的关系

再来看一个例子,下面的代码在 return 的后面空一行后再写要返回的值,那么问运行结果是什么呢?


  1. function fn() { 
  2.   return  
  3.   '小明' 
  4. console.log(fn()) 

这段程序代码因为 ASI 的修正,return 的后面会被加上一个分号,所以 return 与预期返回的值被分开了,结果 return 的内容为空值,最终的结果也只能是 undefined 。


  1. function fn() { 
  2.   return
  3.   '小明'
  4. console.log(fn()); // undefined 

到底应该怎样处理分号

本来 ASI 是出于一片好心,用来修正没有加入分号的代码片段,但偏偏在有的地方并没有发挥它的作用(例如本文一开始所介绍的立即函数),导致代码出现了错误;甚至有些代码不会出错,但会使你的代码执行结果和预期相差万里。

解决 ASI 问题的方式如下:

  • 无论如何都要加上分号,完全由自己决定代码的分割
  • 牢记不会自动加入分号的规则,当不会自动插入分号时,则手动加入

不会被自动加入分号的规则

下面时各种不会自动加入分号的规则:

1.新行的代码是从 (、[、/ 字符开始的,这类情况一般会直接出现 Uncaught TypeError 从而导致代码无法运行。


  1. var a = 1 
  2. var b = a 
  3. (a + b).toString() 
  4.  
  5. var a = 1 
  6. [1,2,3].forEach(bar) 
  7.   
  8. (function() { })() 
  9. (function() { })() 
  10.   
  11. var a = 1 
  12. var b = a 
  13. /test/.test(b) 

2.行以 +,-,*,% 开始,这类情况大多会影响运算结果,所以应该合并为一行。


  1. var a = 2 
  2. var b = a 
  3. +a 

3.新行以 , 或 . 开始,这种用法经常会出现,主要是为了避免代码过长而加入的分隔,这种情况并不会影响运行,如果善用的话会使代码更容易阅读。


  1. var a = 2 
  2. var b = a 
  3.   .toString() 
  4. console.log(typeof b) 
  5.   
  6. var a = 1 
  7. ,b = 2 // b 同样会被 var 声明 

如果遇到需要加入分号的情况,除了可以在语句的末尾加入分号外,也可以把分号加在“不会自动加入分号”的最前方,例如 () 本身不会自动加入分号,在有这种需求时可以将 ; 加到前面(ESLint Standard JS 规范就用这个方法避免错误)。


  1. // 运行错误 
  2. (function() { })() 
  3. (function() { })() 
  4.   
  5. // 正确 
  6. ;(function() { })() 
  7. ;(function() { })() 

总结

有的人认为不加分号可以让代码看起来更干净和精简,而且在大部分情况下并不会出现错误,所以很多人在敲代码时不会加分号。

不过我更倾向于更严格的规范,也许是因为我是从后端转到前端的,习惯了。至于到底怎么选,只要搞清楚运行上的限制,不管哪种风格都是挺不错的,只要你喜欢就好。

IT技术学员就业薪资

13000
薪资

姓名:左*飞
学历:专科
专业:理学与信息科学学院
薪资:13000
入职单位:北京惠信数据

数据来自学员真实就业
拒绝以偏概全

姓名 学历 入职单位 专业 薪水 福利
刘*东 专科 保密 信息工程系 12000 五险一金
刘*东 专科 保密 信息工程系 12000 五险一金
刘*东 专科 保密 信息工程系 12000 五险一金
了解更多学员毕业薪资

多种班型任选,上课方式灵活

怎么样学好JavaScript代码

学习就业全方位服务,IT培训选更省心的机构

怎么样学好JavaScript代码

教学研发

1 项目经理跟班
2 大咖讲师面授
3 名企特聘教学
4 企业场景实操

具体有哪些服务内容

品质保障

1 1对1指导
2 模拟面试
3 职业发展规划
4 终生技术提升

具体有哪些服务内容

就业服务

1 企业定制
2 名企双选会
3 上门招聘
4 企业内推

具体有哪些服务内容

21大课程全新全套学习资料限时免费下载

价值千元学习视频,其他机构花钱买,IT培训网免费送

每年2万人因口碑选择IT培训网学IT

怎么样学好JavaScript代码

在乎每一位学员的职业梦想,坚持教育初心

20000
年培养学员
5000
同期在校学员
16
培训中心遍布全国
20
开设培训中心
500
合作院校
10000
合作企业
12
目前开设课程
200
讲师团队

你关心的问题都在这里

就业优势 就业优势

一地学习 全国就业

· 就业保障体系覆盖全国,
· 10000多家合作企业定期招聘,
· 学员就业可随心选择。

不同的城市
同样的全程面授
IT培训网始终在坚持

· 全国各校区讲师统一管理,招聘标准一致,
· 课程大纲全范围内定期升级更新,
· 保障学员学习质量