一、var申明变量

  学习过JavaScript的同学都应该知道,ES5中申明变量使用var,ES5中的var可以说是无所不能的,所有类型的变量都是由var来申明,但往往很多使用者不知道var申明的变量存在变量提升,即变量可以在申明之前使用,有时不注意申明的作用域会导致全局变量污染,特别要注意这种隐形的全局变量申明,直接没有val,比如a = 3,像这个变量a就成了全局变量,如果此时你在用var申明一个a变量,在使用过程中隐形变量a 的值就会被覆盖,这就是容易导致全局变量污染的原因之一,还以一个大家可能会产生误解的地方就是,所谓全局变量就是在javaScript代码中function最前边的var申明是全局变量,后面的就不是,其实var申明的变量只要不在function中就全部是全局变量,这点一定要注意。特别要说明的一点就是var申明的变量存在变量提升,我们先来看下面一段简单的代码

  

 console.log(a);
var a = 4;
会输出underfined,不会报错referenceError

var申明变量提升举例说明

  二、let申明变量

  今天要给大家解说的let申明变量使用跟var申明一样滴,只不过let申明的变量是只在代码块中有效,即{}中有效,看下面代码

  

 {
let a = 10;
var b = 3;
}
console.log(a)
//ReferenceError:a is not defined
console.log(b)
//

let 变量申明

  从这段代码的运行结果可以明显的看出,let申明的变量出了代码块就无法访问,这样就一定程度上避免了全局变量污染,而且let申明的变量不存在变量提升的现象,也就是说使用let申明变量只能先声明在使用,否则就会报错,现在说的块级作用域可以称作为暂时性死区(TDZ),在这个暂时性死区中申明的变量外边无法访问。还有一点就是一个变量不允许let和var重复申明。在这里顺道给大家说一下块级作用域,ES5中只有全局作用域和函数作用域,没有块级作用域这导致很多场景不合理:

  第一种场景:内层变量可能会覆盖外层变量;

  第二种场景:用来计数的循环变量泄露为全局变量;

let实际上就是为JavaScript新增了块级作用域,而且块级作用域可以嵌套。有兴趣的同学可以去看一看ES6中的do表达式,获取代码块的返回值。

  三、const申明变量

      const申明一个只读的常量,一旦申明,常量的值就不能改变,也就是说const一旦申明常量,就必须立即初始化,不能留到以后赋值,否则就会报错。

  关于ES6中let和const命令申明变量就说这么,如有错误之处,欢迎大家评论区指正讨论,感谢!

  

ES6简介之let和const命令解说的更多相关文章

  1. ES6 入门系列 - let 和 const 命令

    let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = ; ; } a // ReferenceEr ...

  2. ES6学习之-let 和const命令

    let 和const命令 let命令 用来声明变量,类似于var .let声明的变量 只在let命令所在的代码块内有效. 在for循环里也是如此 每次循环其实都是一个代码块 function fn() ...

  3. ES6入门之let和const命令

    前言 大家好,我是一只流浪的kk,当你看到这边博客的时候,说明你已经进入了ES6学习的领域了,从本篇博客开始,我将会将自己学习到ES6的相关知识进行整理,方便大家参考和学习,那么我将带你进入第一节的内 ...

  4. 【ES6基础】let、const命令和变量的结构赋值

    ES5声明变量(2):var .function ES6声明变量(6):var.function.let.const.import和class 1.let命令和const命令 (1)let和const ...

  5. es6语法入门let 和 const 命令

    let块级作用域 { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b for循环的计数器,就很合适使用let命令(防 ...

  6. ES6 第一章 let和const命令 具体参照http://es6.ruanyifeng.com

    1.let类似于var用用来定义变量 1)let没有预解析,不存在变量提升 // var 的情况 console.log(foo); // 输出undefined var foo = 2; // le ...

  7. ES6 常用总结——第一章(简介、let、const)

    ES6整理 1. ECMAScript 6简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准.它的目标,是使得 JavaScript 语言可以用来编写复杂 ...

  8. ES6 之 let和const命令 Symbol Promise对象

    ECMAScript 6入门 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了. (2016年6月,发布了小幅修订的<ECMASc ...

  9. ES6学习笔记(1)----let和const命令

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ let和const命令 let 总结1.声明变量基本使用方法与var 相同  不同点  a.在代 ...

随机推荐

  1. JSON数据的各种操作

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...

  2. [日常] Go语言圣经-并发的非阻塞缓存

    1.go test命令是一个按照约定和组织进行测试的程序2.竞争检查器 go run -race 附带一个运行期对共享变量访问工具的test,出现WARNING: DATA RACE 说明有数据竞争3 ...

  3. oracle逐步学习总结之约束(基础五)

    原创作品,转自请在文章明显位置注明出处:https://www.cnblogs.com/sunshine5683/p/10167717.html oracle中的约束主要有非空约束(not null) ...

  4. Linux常用基本命令(rename,basename,dirname)

    rename:重命名文件, 我下面的操作是在ubuntu16.04发行版 演示的,centos下面的语法有些不同 1,首先,生成1到100命名的.html后缀的文件 ghostwu@dev:~/lin ...

  5. HDU4845(SummerTrainingDay02-C 状态压缩bfs)

    拯救大兵瑞恩 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Subm ...

  6. Codeforces731C(SummerTrainingDay06-M 并查集)

    C. Socks time limit per test:2 seconds memory limit per test:256 megabytes input:standard input outp ...

  7. BZOJ4806(SummerTrainingDay03-K dp)

    炮 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 464  Solved: 243[Submit][Status][Discuss] Descript ...

  8. Unix环境高级编程:fork, vfork, clone

    fork fork产生的子进程是传统意义上的进程,fork之后执行路径就互不关联了,一旦fork返回后面的代码就在不用的进程上下文中执行了.到底是子进程先执行还是父进程先执行一般是随机的或者依赖实现的 ...

  9. Context 上下文

    全称:context 解释:上下文,在我们的开发的程序中,通常使用context上下文. 理解:结合实际生活我们可以把它理解为是语境,比如A说:我喜欢他. 那么这个他是谁,我们不知道,如果在这句话之前 ...

  10. layui实现复选框全选,反选

    html <div class="layui-input-inline"> <input type="checkbox" class=&quo ...