const and let let const 教程
= 123; bar = 456; // TypeError: `bar` is read-only 注意和Object.freeze的区别。...= 234; // 这里应该要报错的,但是chrome现在没有报错 console.log(obj.a); // 123 Temporal Dead Zone (TDZ) 由let和const声明的变量都会有自己的...undefined tmp = 123; console.log(tmp); // 123 } console.log(tmp); // true TDZ的原因可以简单地理解为,let和const...不存在变量提升 并且要注意,这段代码经过babel编译,结果会是:undefined, undefined, 123, true,不会报错,因为babel是使用var去最大限度模拟let 何时使用let和const...尽可能使用const 当变量需要改变的时候,把const改为let 参考资料 Exploring ES6
https://blog.csdn.net/caomage/article/details/83586048 ES6(一):let和const 一、let 1. let基本用法 相当于var...而当我们用let定义变量时,就必须严格按照先定义再使用的原则了,反之则会抛出一个大大的引用错误(ReferenceError),显然这更符合人们的使用习惯。...暂时性死区及不能重复声明 ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。 ...二、const 1. const基本用法 const命令是声明一个常量,用法和let一样。...和let的相同之处是: const与let作用域相同,都是只在声明的代码块中起作用 const也不会提升所声明的常量 const也不能重复声明 不同之处是const声明的常量在声明时就必须赋值,因为一旦声明就不能改变改常量的值
只能赋值一次的常量 const ES6之前,我们只有一种声明变量的方式:var,不能声明常量,如果我们有一些不变的值,比如一些固定的错误代码,我们可能会这样去声明,把它们当做常量来使用: var ERROR_NETWORK...= 0; var ERROR_NO_RESPONSE = 1; var ERROR_DATA_FORMAT = 2; 我们不希望其他代码去改变这些变量的值,但是其实是没有办法做到的。...在ES6里,终于新增了const关键字,可以用于声明真正的常量啦: const ERROR_NETWORK = 0; const ERROR_NO_RESPONSE = 1; const ERROR_DATA_FORMAT...在ES6中,现在引入了一个新的关键字let,来更好的处理以上我们遇到的问题。 在同一个作用域中,一个变量名只能声明一次。...let a = 1; let a = 2; //错误 变量只在自己所处的块(block)中起作用 let a = 1; { //这里是一个block,所以可以再次声明变量a let a = 2
let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1 不存在变量提升 var会存在变量提升现象, let和const...var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; } ES6 明确规定,如果区块中存在let和const命令...var s = 'hello'; for (var i = 0; i < s.length; i++) { console.log(s[i]); } console.log(i); // 5 ES6...const const声明一个只读的常量。 const除了以下两点与let不同外,其他特性均与let相同: const一旦声明变量,就必须立即初始化,不能留到以后赋值。...为了解决这个问题,es6引入的let 、const和class声明的全局变量不再属于顶层对象的属性。
块级作用域存在于: 函数内部 块中(字符 { 和 } 之间的区域) let 和 const 块级声明用于声明在指定块的作用域之外无法访问的变量。 let 和 const 都是块级声明的一种。...我们来回顾下 let 和 const 的特点: 1....访问 TDZ 中的变量会触发运行时错误。只有执行过变量声明语句后,变量才会从 TDZ 中移出,然后方可访问。...循环中的 let 和 const 不过到这里还没有结束,如果我们把 let 改成 const 呢?...Babel 在 Babel 中是如何编译 let 和 const 的呢?
前言 在很多人的意识中,JS里的const变量仿佛就是其他语言中的常量一样完全不可变,——这样理解const的作用当然是完全错误的,然而不幸的是这种误解从没消失过,甚至还相当流行。...正文 ES6中的const创造的是一种不可变得binding(绑定),这不代表被const定义的变量是一个constant(常量)或是immutable(不可变的)。一个const变量是可以改变的。...const vs. let const和let唯一的区别是,const让rebinding(重新绑定)不能发生。 本文写到这里都是基于事实的内容,接下来我说点主观的东西。...let或者const,都不要在ES6代码里用var 不知道你同意吗?...是因为“const定义的是常量”这种概念上的错误理解,还是别的什么原因?欢迎你们留言写下自己的理由。
,其中var在ECMAScirpt的所有版本中均可使用,而let和const只能在ES6及更晚的版本中可以使用 以下对var、let和const关键字进行对比: (1)是否初始化变量 先说结论:var和...3)const const和let的作用域一样,简单看一下不再做解释: function demo() { const city = 'guangzhou'; } demo(); console.log...(city); 和 if (true) { const city = 'guangzhou'; } console.log(city); 均这个报错: if (true) { const...而受影响: var sex let sex 3)const const sex const sex 和let一样,const也允许在不同块作用域内重复声明变量,且混用var和const声明同样会报错...的一个重要区别就是let声明的变量不会在作用域中被提升 3)const 和let关键字一样,不能被提升,不再赘述 (5)全局声明 与var关键字不同,使用let和const声明的变量不会成为window
明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。...这在语法上,称为“暂时性死区” 暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。...声明一个常量,大部分特点和let一样 只在声明所在的块级作用域内有效。...ES6 规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。...也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。
part1. var let 和 const 命令 ?...---- const声明一个只读的常量,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。...const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。...扩展:除了 ES5 两种声明变量的方法:var命令和function命令。 ES6 除了添加let和const命令,另外两种声明变量的方法:import命令和class命令。...所以,ES6 一共有 6 种声明变量的方法。我们以后会给大家再聊聊这些应用
一、let 1、基本用法 ES6 新增了let命令,用来声明变量。...在声明它之前,变量 b 是不存在的,这时如果用到它,就会抛出一个错误。 3、暂时性死区 只要块级作用域内存在 let 命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。...ES6 明确规定:如果区块中存在 let 和 const 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。...: "foo" is read-only 下面是另一个例子。...和var的区别总结 var let const 在当前作用域内有效 只在当前块级作用域内有效 只在当前块级作用域内有效 能重复声明 不能重复声明 不能重复声明 存在变量提升 暂时性死区 暂时性死区 声明变量时可不赋值
体系 我们在使用java的时,经常面对和处理的是异常(Exception)很少处理错误。因为如果是错误级别的往往都是比较底层的非代码层面的问题。 但是这两个的区别,有必搞清楚。...class Test { public void test(int a, int b) { int c = a / b; } } 会不会抛异常,用眼睛看很合理,没毛病,但是问题是你不知道a和b...错误 Error 代码运行中不是由代码引起的问题,是由外部资源异至的JVM错误,一般就归到错误里,通常由JVM处理问题,有的错误JVM也处理不了。...Error 是可以被捕获的,但是程序都已经出现了JVM都无法处理的错误,捕获的意思除了打印详情外,还让程序继续执行,比如 OOM 这种错误,还有必要执行吗,生产环境,这样做可能会造成经济损失,所以完全不建议捕获错误...捕获错误 不推荐 还是那句话,JVM都Error了,再让程序运行,没有意义,不能保证JVM能恢复正常。
1.2、let 和 const 命令 var 之前,我们写js定义变量的时候,只有一个关键字: var var 有一个问题,就是定义的变量有时会莫名奇妙的成为全局变量。...const const 声明的变量是常量,不能被修改,类似于java中final关键字。 ? ? 可以看到,变量a的值是不能修改的。
简介 在ES6以前,变量的声明都是使用var关键字,且会进行变量声明提升。另外,我们曾经讲过,JS中是没有块级作用域的,这一点也带来了很多的不便。ES6 新增了let和var两个关键字,用来声明变量。...其实,ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。...还有如下情况: // 不报错 var x = x; // 报错 let x = x; // ReferenceError: x is not defined ES6 规定暂时性死区和let、const...这样的错误在 ES5 是很常见的,现在有了这种规定,避免此类错误就很容易了。...const 命令 深入ES6 (二)let和const ES6这些就够了
es是js的规范,而js是具体实现 将es6转化为es5代码工具:运用的多的是babel 在线转换地址:babel,traceur(属于谷歌) let let和var很相似,用于声明一个变量。...= 123; bar = 456; // TypeError: `bar` is read-only 注意和Object.freeze的区别。...= 234; // 这里应该要报错的,但是chrome现在没有报错 console.log(obj.a); // 123 Temporal Dead Zone (TDZ) 由let和const声明的变量都会有自己的...undefined tmp = 123; console.log(tmp); // 123 } console.log(tmp); // true TDZ的原因可以简单地理解为,let和const...不存在变量提升 并且要注意,这段代码经过babel编译,结果会是:undefined, undefined, 123, true,不会报错,因为babel是使用var去最大限度模拟let 何时使用let和const
old' } { let zxx3 = 'zxx is a good girl' var zxx4 = 'zxx is 8 years old' } // 不会报错,各个块级作用域之间不互相影响 const...:就是声明一个常量,大部分特点和let一样 声明的时候一定要赋值,否则会报错 const b; // Uncaught SyntaxError: Missing initializer in const...declaration 对于基本的类型而言的话,比如number,string,boolean等来说,确实它就是声明一个不会变的常量,只要你修改了它,就会报错 const ZXX = 'zxx is...const ZXX = { age: 18, name: 'zxx' } ZXX ==> {age: 18, name: "zxx"} ZXX.age = 8 {age: 8, name: "zxx...也就是说const定义的引用类型只要指针不发生改变,其他的不论如何改变都是允许的。
【error】jQuery ajax请求错误返回status 0和错误error的问题 : ajax error:{"readyState":0,"status":0,"statusText":"error..."} 异常描述: 第一次ajax,后台都没问题,但是却进入error方法,错误码0,错误信息error。
Go错误处理和Error日志打印实践 如何参数校验?...Info 发生了某件事,我们可能会在排查业务问题或查询相关信息时用到 Notice 同上,一般不用 Debug 用于调试 Trace 用于调试 打印最上层打印req和resp 关键路径打印info/...原则: error应为上游提供简单易懂的提示 error应为问题排查提供帮助 error是业务处理的一部分,应尽可能处理error,防止未知错误以及panic 遵循依赖倒置原则 什么时候打印 error...建议: 不需要处理的错误,错误级别不要使用Error级别,可以打印成Warn、Info、Debug等。...然后就需要通过字符串匹配,判断 err.Error()中的信息,这是非常不合理的。 建议 处理错误的原则:只处理(打印)一次错误 如果错误不需要被处理,添加上下文信息,并返回给上层,不需要打印。
不能单独使用await,必须在async函数作用域下使用,否则将会报出异常“Error: await is only valid in async function”,示例代码如下: function...Initiate countdown: '); } else { console.error('Rocket not ready....函数 export async function main() { const randomNumber = await getRandomNumber(); const ready = await...enginesOk) { console.error('engines not ready'); } if (!...你可以设想,处理错误是一个重要的任务,并且async/await允许我们使用try/catch的方式同时处理异步和同步代码的错误,大大简化了我们处理错误的工作量,让代码更加简洁。
领取专属 10元无门槛券
手把手带您无忧上云