在没出现 let 和 const 以前,咱们定义变量只能用 var。可是用 var 定义变量一般有不少的问题,就是咱们常说的变量提高,例如:前端
if (false) {
var a = 1; } console.log(a); 复制代码
若是初学者第一次看这段代码的时候,确定会以为段代码会报错,由于 if 中的条件是 false,并无执行 var a = 1,因此最后应该报 a 没有定义的错误,可是实际最后却输出了 undefined,这就是变量提高。 什么是变量提高: MDN 是这么说的:变量提高(Hoisting)被认为是, Javascript 中执行上下文 (特别是建立和执行阶段)工做方式的一种认识。在 ECMAScript® 2015 Language Specification 以前的 JavaScript 文档中找不到变量提高(Hoisting)这个词。不过,须要注意的是,开始时,这个概念可能比较难理解,甚至恼人。 这就没了?对这就没了!当看到的时候一样有这个疑问,因此我在var 描述中找到了这么一句话:变量声明,不管发生在何处,都在执行任何代码以前进行处理。 因此以上代码能够被翻译成这样:git
var a;
if (false) { a = 1; } console.log(a); 复制代码
咱们先看一下 let 的几大特性:github
咱们经过代码来看一下:编程
if (false) {
let a = 1; } console.log(a); 复制代码
欣喜若狂终于获得了咱们想要的结果,报错,a 没有被定义。markdown
var a = 1;
let a = 2; 复制代码
哇塞,报错了,显示 a 已经被定义过了,这简直是太友好了,终于不会一不当心就改变了全局变量,也终于避免了重复命名的危险。oop
let a = 1;
console.log(window.a); // undefined 复制代码
根本没有定义到全局上,主要仍是由于 let 是块级做用域不是全局做用域。post
在开发中 const 咱们通常是来定义常量,即不可更改的量,它的基本特性和 let 是差很少的。学习
const a = 1;
a = 3; 复制代码
执行上述代码时,会报错,由于 const 定义的是常量,没法进行修改。可是当 const 定义的是引用数据类型时:ui
const a = {
value: 1, }; a.value = 2; console.log(a); // {value: 2} 复制代码
感受有些打脸,但确实如此,这是由于 const 定义的实际是引用地址,它判断是的引用地址是否发生变化,虽然改变了引用数据中的数据,可是它的引用地址并无发生变化,因此就能够更改,可是这种方式仍是不提倡的。spa
相关文章:
以为还能够的,麻烦走的时候能给点个赞,你们一块儿学习和探讨!
还能够关注个人博客但愿能给个人github上点个Start,小伙伴们必定会发现一个问题,个人全部用户名几乎都与番茄有关,由于我真的很喜欢吃番茄❤️!!!
想跟车不迷路的小伙还但愿能够关注公众号 前端老番茄 或者扫一扫下面的二维码👇👇👇。
我是一个编程界的小学生,您的鼓励是我不断前进的动力,😄但愿能一块儿加油前进。
本文使用 mdnice 排版