首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS魔法堂:ASI(自动分号插入机制)和前置分号

ASI机制不是说在解析过程中解析器自动把分号添加到代码中,而是说解析器除了分号还会以换行为基础按一定的规则作为断句的依据,从而保证解析的正确性。    首先这些规则是基于两点: 1....代码块的最后一个语句会自动插入分号 function(){ a = 1 } // 等价于 function(){ a = 1; }    No ASI的规则  1....那既然存在ASI机制,那为什么还有那么多团队的代码规范中还规定必须写分号呢?不外乎三个原因:1. 因为存在No ASI的情况,懒得记忆这些特例;2....团队的工程师需要兼顾前后端开发(苦逼如我~~),而后端采用Java、C#或PHP,保持两端代码规范接近管理成本较低;3. 旧有的规范就是这样,现在也没必要改了。  ...对于省略分号代码压缩工具会出问题,jslint会对无分号代码报warning等问题,贺师俊已经在回复中对其进行详细说明了。

1.8K80

JS分号可以省掉吗?

这么简单的代码为什么会出错呢?第一反应就是JS引擎将代码生成语法树的时候,可能解析不正确。于是,我在第一行末尾加分号测试。...大宗师Douglas Crockford表示要正确使用分号 引用minhan在扯不完的 JS 分号问题文中的论述: JSON、JSLint、JSMin和ADSafe 的创造者、ECMA JavaScript...号作为中缀运算符使用,这个代码不久将来就运行不了。赶紧修复吧,学学怎么正确地使用分号。『!』号并不语句的分隔号,『;』才是。 JSMin处理如下代码后无法正确执行: clearMenus() !...这是一个辅助性的功能,然后有一些情况要注意: 如果你这样写代码: return a + b 那么自动分号插入后会这样: return; a + b; 更可能导致隐含BUG的状况是: a = b + c...如果你不想用分号,又怕出问题,v2ex上有位童鞋给出了一个速记方案: 如果你写 JS 代码不喜欢带分号,而又搞不清什么时候必须加分号,可以这么做:在以 "("、"[" 、"/"、"+"、"-" 开头的语句前面都加上一个分号

9K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JS该写分号嘛? - wuuconixs blog

    ASI 在写JS之前,我一直在写Python,习惯了没有分号代码。 刚好,JS为我们提供了 自动分号插入 Automatic Semicolon Insertion!...这让我们在大部分情况下都不用写分号,非常的优雅。 然而ASI在某些情况下将产生错误。 ASI发生错误的情况 IIFE 立即调用函数表达式 考虑以下代码。...> node 1.js /root/1.js:2 (function log() { ^ TypeError: 1 is not a function 提示显示1不是一个函数,看来引擎把代码理解成了这个样子...然后值得注意的是,undefined = [d, c]虽然对undefined本身没有影响,但是它本身作为一个赋值表达式也是值的,它的值就是[d, c] 故最后运行的表达式实际上是这样的[a, b]...总结 实际上,完全不用为了ASI在一些情况下导致错误而每行都加上一个分号

    1.1K20

    node.js要不要加分号

    一开始,关于在node.js句末不加分号,我是拒绝的。因为有时不加分号会报错。 我觉得node.js在语法层面挺拧巴的,要么就像PHP那样严格要求加分号,要么就像python一律不加分号。...加不加分号,这是一个问题 直到一天我了解了加不加分号的场景,才终于释然 一言以蔽之:当代码是以 ( [ ` 这些符号开头时,就需要在代码之前加上分号,其他场景都不需要加分号 let msg =....js:3 (function () { ^ TypeError: "加不加分号呢" is not a function at Object....:191:16) at bootstrap_node.js:612:3 正确的写法: let msg = '加不加分号呢' ;(function () { console.log('我是一个匿名函数...') }()) 同理,以 [ 或 ` 开头的代码应该这么写: ;['章北海', '罗辑'].forEach(function (item) { console.log(item) }) ;`

    2K20

    用 VSCode 调试网页的 JS 代码多香

    一般来说,调试 Node.js 上跑的 JS 代码我会用 VSCode 的 debugger,调试浏览器上的 JS 代码我会用 chrome devtools。...直到一天我发现 VSCode 也能调试浏览器上的的 JS 代码,试了一下,是真的香。 具体多香呢?我们一起来看一下。...确实,chrome devtools 也能做到一样的事情,但 VSCode 来调试网页代码两个主要的好处: 在编辑器里面给代码打断点,还可以边调试边改代码。...调试 Node.js代码和调试网页的代码用同样的工具,经验可以复用,体验也一致。...JS 引擎是 event loop 的方式不断执行 JS 代码,因为火焰图是反应所有的代码的执行时间,所以会看到每一个 event loop 的代码执行,具体耗时多少。

    5K10

    调试JS代码

    记录下近期对JS代码的调试过程 性能分析 启动程序之后,打开google浏览器对应页面,按F12或者Ctrl+Shift+I进入 开发者工具页面 目前主要使用的功能有: Performance....性能评估,比如我想看下页面刷新的性能瓶颈所在,先点击 按钮,然后进行页面操作,当页面刷新完成,再点击 按钮,则会生成性能报告,可以看到资源消耗,JS代码的执行逻辑等 Sources....性能报告页面的 部分,可以通过点击色块查看其所在的js代码文件,如 点击则会跳转到 功能栏,了源文件就可以进行断点调试;这里注意部分js文件是压缩后的文件,建议手动修改程序替换成可读性更强的原始代码文件...查看程序的打印输出,比如我想知道某个函数的执行时间,可以在js代码中进行修改 当js代码执行之后,可以在console输出中看到foo的执行时间 Network....[2,1,4,10…]的 颜色数组 转换成RGB表示,js代码使用for循环进行操作,也就是线性复杂度,计算耗时随数据量的增大而线性增大 通过debug观察发现颜色数组会有不少重复的数值,而同样的输入会导致相同的输出

    19K10

    js代码规范

    前言 在js代码开发中,我简单的总结出了以下规则,后面会陆续补充并且对规范进行分类。...js代码建议保存到后缀名.js的文件中 js代码不建议放在html中,原因:不能被缓存,会增大网页文件的大小,可维护性不高,会影响页面的加载。...js吧任何表达式都当一条简单语句,会导致一些隐性的错误。如果自己没加分号,那么js解释器会自动添加分号,按照自己能读懂的断句。 9.2 复合语句 也称为语句块,被包在大括号内部。...变量作用域 js没有块级作用域,只有函数作用域。 [] {} 的用法 使用直接量发来声明对象和数组。...尽量使用语法严格模式 消除代码之中的不友好;代码运行更快 ;保证运行的安全 ;为新版本的js做好铺垫。 22.

    8.8K30

    JS代码混淆 | js 逆向系列

    /UglifyJS/ https://github.com/LiPinghai/UglifyJSDocCN/blob/master/README.md 使用方法 npm install uglify-js...-g uglifyjs example.js -c -m --mangle-props -c 代码压缩 -m 代码混淆 --mangle-props 混淆属性名 -b 美化显示 // 原代码 const...JShaman https://www.jshaman.com/ JShaman 是国内公司开发的js代码加密商业产品 免费版可以直接使用 // 原代码 const person = { age...,通过数组、字典等各种形式存储、拼接、替换等,最终进行还原,这里面没有利用到复杂的语法以及js 语言本身的特性,所以我们一点点解开也学不到什么; 这个代码就不一样了,我们一步一步解开它,尝试去学习其中的思路...如果你跟着我完整看了一遍 ob 的混淆方式,恭喜你,基本上已经对混淆的手段了了解,ob 是个优秀的项目,如果项目赞赏方式,这篇文章所有的赞赏都会加倍传递给这个项目 接下来的内容就会轻松很多了,有趣不压抑

    2.2K10

    通过d.ts文件,让VSCode在写js代码时能够智能提示代码补全

    在学习wpsjs开发过程中,非常痛苦的是写js代码时没有智能提示,写惯了.NET静态语言后来写js代码,这个没有智能提示太难受了,特别是引用第三方工具类时。...偷懒的天性催逼着要努力去找解决方案,在js世界中,不可能有人长期能够被没有智能提示所虐,于是漫长地搜索寻求过程,终于了出路。...不要对这个wpsjs的类型库抱太高期望,它和wpsjs库不同步,滞后,并且类型定义根本不对的,很多应该返回对象的,都变成一个方法返回。...所以现阶段也只能按最上面的方式,在控制台里敲代码,然后复制粘贴了。 当我们用npm安装了对应的types库后,代码提示就出来了。 ?...对于我们面向浏览器端的js编写,最终是通过在script标签上引用js文件的,但开发过程中,貌似直接使用npm install命令将其整个库拉到本地来使用,可以更方便,并且也有了智能提示。

    10.7K30

    Js 逆向进阶 | 浅谈 Js 代码保护

    作者:不知世事 原文:https://blog.csdn.net/feibabeibei_beibei/article/details/98232069 JavaScript 代码保护浅谈 国外: 1....jscrambler(商业):链接:https://jscrambler.com/ 收费比较高; 2.JavaScript-Obfuscator(开源) 了开源很多人都在这个基础上改改,但是强度也是会比较弱...vmp 最强的,这种方案其实也是很好理解的,比如对于一个js代码来说,我们只用js操作写一个基于栈的解释器,然后对于本身要保护的js进行虚拟化,定义一堆自定义操作,这个时候其实还是比较弱,因为全部是...结合服务端针对多样性来增加难度; 5.做移动安全代码保护的传统厂商们 这里就不评论分析了,因为他们可能重点在APP相关的dex、so以及手游相关的文件上;6.其他 像其他的一些大厂比如阿里这种肯定做了jsVMP...总结 对于 js 这种语言来说,由于语言本身的特殊性,一定的保护是非常必要的,再结合浏览器本身的发展,为了性能会在编译上做处理,引入本地层的东西,比如谷歌的 V8 ,火狐的 asm.js 在安全性上:业务上更多的结合服务端动态特性以及客户端强大的静态代码保护的设计会达到一个比较好的效果

    27.7K20

    JS代码之混淆

    js 代码中混淆与还原的对抗,而所使用的技术便是 AST,通过 AST 能很轻松的将 js代码混淆成难以辨别的代码。...必要学 AST 吗​ 如果作为 JS 开发者并且想要深入了解 V8 编译,那么 AST 基本是必修课之一,像 Vue,React 主流的前端框架都使用到 AST 对代码进行编译,在 ast 学习中定能让你对...JS 语法一个更深入的了解。...即便你的程序也许在运行时报错,但都不会影响 AST 解析(除非语法错误),在 js 逆向中,通过静态分析还原出相对容易看的出的代码对于代码分析,而对于一些需要知道某一变量执行后的结果静态分析是做不到的...整个混淆的过程来看,无非就是多了门技能,对 js 了更进一步的了解,略懂 js 编译过程中的语法分析,此外也感叹 Babel 提供如此强大的 api。

    21.9K10

    js代码混淆工具?

    什么是js混淆工具?js混淆工具是一种能够将js代码转换成难以阅读和理解的代码的工具,通常用于保护js代码的安全性和版权,防止被恶意修改或盗用。...代码转换:将代码中的一些语法或者表达方式转换成另一种等效的形式,增加代码的多样性和难度。为什么要使用js混淆工具?...js混淆工具的主要目的是为了保护js代码不被轻易地反编译或者破解,提高js代码的安全性和稳定性。...由于js代码是运行在浏览器端的,任何人都可以通过查看网页源码或者使用开发者工具来查看和修改js代码,这给js代码带来了很大的风险。...总结js混淆工具是一种能够保护js代码安全性和版权的工具,通过将代码转换成难以阅读和理解的形式来实现。在选择js混淆工具时,需要根据自己的需求和使用场景选择。

    69500
    领券