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

JS分号可以省掉吗?

摘要: JavaScript语言从设计之初就是考虑带分号,使用不带分号编码规则就要小心点啦。...这么简单代码为什么会出错呢?第一反应就是JS引擎将代码生成语法树时候,可能解析不正确。于是,我在第一行末尾加分号测试。...在网络上搜索JavaScript关于分号BUG,发现有非常多关于要不要使用分号讨论。...大宗师Douglas Crockford表示要正确使用分号 引用minhan在扯不完 JS 分号问题文中论述: JSON、JSLint、JSMin和ADSafe 创造者、ECMA JavaScript...如果你不想用分号,又怕出问题,v2ex上有位童鞋给出了一个速记方案: 如果你写 JS 代码不喜欢带分号,而又搞不清什么时候必须加分号,可以这么做:在以 "("、"[" 、"/"、"+"、"-" 开头语句前面都加上一个分号

9K60

bash 脚本中分号作用「建议收藏」

在Linux bash shell,语句中分号一般用作代码块标识 1、单行语句一般要用到分号来区分代码块。...比如: weblogic@pmtest:/if [ “PS1” ]; then echo test is ok; fi test is ok 该脚本或命令行,须要两个分号才为正确语句,第一个分号是then...前分号,用于标识条件块结束。...第二个分号在fi前,用于标识then块结束,假设缺少这两个分号,则程序运行错误。 这里有趣是echo后字符串不须要使用引號也能正确地被识别。 注意:语句结尾不要分号。 2、该代码若写作多行。...而不使用esle if,若使用else if,则为不完整语句,如以下样例不能被正确运行: weblogic@pmtest:/if [ “PS1” ] > then echo test is ok >

2.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

js作用

es6之前作用域 特点1 :js只有函数级作用域以及全局两种 特点2 :不通过var声明变量直接赋值也可以用并且可以访问,原理是直接赋值到了window对象属性变量下,两者如果同时定义,那么会覆盖使用...,利用了函数链接作用特点,同时可以对外暴露部分,将我们需要部分保留在内存。...块级作用域 场景一 循环中块级作用域 如果我们有一个遍历循环绑定事件,并且需要把当前指针绑定到对应方法。...,利用let块级作用域特性,区别就是定义变量时 i是块级变量,所以定义函数变量也是当时块级作用域,不随外面非块级元素值变化影响 var arr=[] for(let i=0;i<10;i++)...,包括在循环以及不同语句块

3.2K20

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

,而且必须加分号,否则编译就不通过了。...ASI机制不是说在解析过程解析器自动把分号添加到代码,而是说解析器除了分号还会以换行为基础按一定规则作为断句依据,从而保证解析正确性。    首先这些规则是基于两点: 1....var a = 1 while(++a < 100); 三、前置分号                             重申一下分号作用——作为语句断言(EOS),目的是让解析器正确解析程序。...那既然存在ASI机制,那为什么还有那么多团队代码规范还规定必须写分号呢?不外乎三个原因:1. 因为存在No ASI情况,懒得记忆这些特例;2....对于省略分号后代码压缩工具会出问题,jslint会对无分号代码报warning等问题,贺师俊已经在回复对其进行详细说明了。

1.7K80

JS匿名函数作用

- 匿名函数主要利用函数内变量作用域,避免产生全局变量,影响整体页面环境,增加代码兼容性。(如下图) ? 那么 他作用是什么?...我们首先假设一个场景,一个网站使用了jQuery框架进行了许多DOM操作,然而,在“有心人”操作之下,能够将整个jQuery'$'函数变成其他功能,例如: 在控制台中输入: $=null...如何避免 将页面中使用各类函数都封在以下函数: (function ($) { })($); 将jQuery特有的'$'符号作为参数传入匿名函数以保护页面内容...只要使用得当,自然能够避免这些不必要麻烦。...---- 个人看法:这个匿名函数也有些类似于ES6let方法,所声明内容能够有效避免全局变量产生,所以即使在控制台中,也不能够随意改变该页面的内容,我想 let方法出现可能就是为了补充前面的不足吧

2.9K20

JS该写分号嘛? - wuuconixs blog

ASI 在写JS之前,我一直在写Python,习惯了没有分号代码。 刚好,JS为我们提供了 自动分号插入 Automatic Semicolon Insertion!...这让我们在大部分情况下都不用写分号,非常优雅。 然而ASI在某些情况下将产生错误。 ASI发生错误情况 IIFE 立即调用函数表达式 考虑以下代码。...> node 1.js a: 4 b: 3 c: 3 d: 4 js把中间两个swap看成了 [a, b] = [b, a][c, d] = [d, c] 仍然是一个连等,我们需要从右往左看,首先是...这种没有报错隐式错误,真在Leetcode刷题时候 够你Debug半天了2333。 总结 实际上,完全不用为了ASI在一些情况下导致错误而每行都加上一个分号。...对于我目前遇到这两种情况,可以总结一下,如果一行开始是一个(或者[,那么再上一行你需要手动加上一个分号,至于其他情况,完全不用考虑分号~ 还可以参考一下尤大这篇回答 https://www.zhihu.com

1.1K20

js块级作用

在上一篇说到了作用域,简单介绍了一下块级作用域,在这里我们来详细介绍一下。 众所周知,在js函数作用域是常见单元作用域,也是现行大多数js中最普遍设计方案。...i,而忽略了 i 会被绑定在外部作用域(函数或全局)事实。...块作用域是一个用来对之前最小授权原则进行扩展工具,将代码从在函数隐藏信息扩展为在块隐藏信息。...因为catch 分句具有块作用域,因此它可以在 ES6 之前环境作为块作用替代方案。一些工具可以将 ES6 代码转换成能在 ES6 之前环境运行形式。...let ES6出现对于js开发者来说一个非常开心事情,,其中一点就是他引入了新 let 关键字,提供了除 var 以外另一种变量声明方式。

2.5K10

关于JS作用域中沉思

scope和closure是javascript两个非常关键概念,前者JS用多了还比较好理解而且容易体会到,而closure就不一样了。...在一个函数内部定义函数,闭包中会将外部函数自由对象添加到自己作用域中,所以可以通过内部函数访问外部函数属性,这就是js模拟私有变量一种方式。...,由于其存在,使fori存在于局部作用域中,而不是再全局作用域。...[闭包let.png] 这个函数表执行完毕,其中变量会被销毁,但是因为这个代码块存在一个闭包,闭包作用域链引用着局部作用域,所以在闭包被调用之前,这个块级作用域内部变量不会被销毁。...(i); }; } 在上面这个执行环境,它会首先寻找该执行环境是否存在i,没有找到,就沿着作用域链继续向上找,在其所在块级作用域执行环境,找到i=1,于是输出1。

85200

JS作用域下 21

charset="UTF-8"> Document /* 注意点: 初学者在研究作用时候最好将...ES6之前和ES6分开研究 1.需要明确: 1.ES6定义变量通过let 2.ES6除了全局作用域、局部作用域以外, 还新增了块级作用域...3.ES6虽然新增了块级作用域, 但是通过let定义变量并无差异(都是局部变量) 2.ES6作用域链 1.1.全局作用域我们又称之为0级作用域 2.2....定义函数或者代码块都会开启作用域就是1级/2级/3级/...作用域 2.3.JavaScript会将这些作用域链接在一起形成一个链条, 这个链条就是作用域链 0...3.1先在当前找, 找到就使用当前作用域找到 3.2如果当前作用域中没有找到, 就去上一级作用域中查找 3.3以此类推直到0级为止, 如果0级作用域还没找到, 就报错

1.3K20

node.js要不要加分号

一开始,关于在node.js句末不加分号,我是拒绝。因为有时不加分号会报错。 我觉得node.js在语法层面挺拧巴,要么就像PHP那样严格要求加分号,要么就像python一律不加分号。...而node.js却表现出一副欲拒还迎姿态,让人感觉就是既要拥抱变化,又要抱残守缺。 ?...加不加分号,这是一个问题 直到有一天我了解了加不加分号场景,才终于释然 一言以蔽之:当代码是以 ( [ ` 这些符号开头时,就需要在代码之前加上分号,其他场景都不需要加分号 let msg =...:191:16) at bootstrap_node.js:612:3 正确写法: let msg = '加不加分号呢' ;(function () { console.log('我是一个匿名函数...宇宙究竟有多少个文明?

1.9K20

JS作用域链上 20

"时候最好将ES6之前和ES6分开研究 1.需要明确: 1.ES6之前定义变量通过var 2.ES6之前没有块级作用域, 只有全局作用域和局部作用域...3.ES6之前函数大括号外都是全局作用域 4.ES6之前函数大括号都是局部作用域 2.ES6之前作用域链 2.ES6之前作用域链...1.1.全局作用域我们又称之为0级作用域 2.2.定义函数开启作用域就是1级/2级/3级/...作用域 2.3.JavaScript会将这些作用域链接在一起形成一个链条..., 这个链条就是作用域链 0 ---> 1 ----> 2 ----> 3 ----> 4 2.4.除0级作用域以外, 当前作用域级别等于上一级+1...3.变量在作用域链查找规则 3.1先在当前找, 找到就使用当前作用域找到 3.2如果当前作用域中没有找到, 就去上一级作用域中查找 3.3以此类推直到0

66920

linux分号&&和&,|和||说明与用法

在用linux命令时候,我们可以一行执行多条命令或者有条件执行下一条命令,下面我们讲解一下linux命令分号&&和&,|和||用法 “;”分号用法 方式:command1 ; command2 用...“| ”管道符用法 上一条命令输出,作为下一条命令参数 方式:command1 | command2 Linux所提供管道符“|”将两个命令隔开,管道符左边命令输出就会作为管道符右边命令输入。...管道将rpm -qa命令输出(包括系统中所有安装RPM包)作为grep命令输入,从而列出带有licq字符RPM包来。...命令,grep命令找出含有“/bin /bash”所有行;第二个管道将grep输出送给wc命令,wc命令统计出输入行数。...“&&”符号用法 shell 在执行某个命令时候,会返回一个返回值,该返回值保存在 shell 变量 ? 。当 ? == 0 时,表示执行成功;当 有时候,下一条命令依赖前一条命令是否执行成功。

5K21

JS作用

JavaScript作用域有全局作用域和局部作用域 先通过一下代码来体验下作用域 var x = 1; function f1(){ var y = 2; x = 10; console.log...ReferenceError: y is not defined at :7:13 上述代码变量x就是全局作用域,方法f1作用域也是全局,f1方法变量y是局部,y作用范围仅限f1方法体内...,离开了f1方法体作用范围,就无法获取到y值,所以上述例子中最后打印y时候是undefined 我们再来看下面的例子 var a = 1; function f1(){ console.log...a,当前a值为undefined 4-3)定义局部变量c,当前c值为undefined 4-4)给局部变量b进行赋值,使用2*a表达式结果进行赋值,由于a值为undefined,...所以b值为NaN(Not a Number) 4-5)给局部变量a赋值为20 4-6)给局部变量c进行赋值,使用a+1表达式结果进行赋值,由于上一步局部变量a值为20,所以a+1表达式值为

8410
领券