一、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. 关于《阿里巴巴Java开发规约》插件的安装与使用

    一.安装 二.idea插件的安装与使用 https://github.com/alibaba/p3c/tree/master/idea-plugin#run-plugin Idea Plugin Pr ...

  2. Evolution(矩阵快速幂)zoj2853

    Evolution Time Limit: 5 Seconds      Memory Limit: 32768 KB Description Evolution is a long, long pr ...

  3. 【 js 性能优化】【源码学习】underscore throttle 与 debounce 节流

    在看 underscore.js 源码的时候,接触到了这样两个方法,很有意思: 我先把实现的代码撂在下面,看不懂的可以先跳过,但是跳过可不是永远跳过哦- 一个是 throttle: _.throttl ...

  4. bzoj P5016[Snoi2017]一个简单的询问——solution

    Description 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出   get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次. Input ...

  5. JS中文档碎片的理解和使用

    1.我们要明白当js操作dom时发生了什么? 每次对dom的操作都会触发"重排"(重新渲染界面,发生重绘或回流),这严重影响到能耗,一般通常采取的做法是尽可能的减少 dom操作来减 ...

  6. 【代码笔记】iOS-UIActionSheet字体的修改

    一,效果图. 二,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...

  7. SD从零开始59-61,跨公司的库存转移,Interface 修改,可用性检查和需求传递

    [原创]SD从零开始59 跨公司的库存转移处理流程 库存转移流程Stock Transfer Procedure 2个工厂间的库存转移能够使用不同的流程来执行: 只执行一个库存转移记账的流程使用MM库 ...

  8. 如何在单元测试时隔离ORM

    在项目中需要对DAL层进行单元测试,如果直接操作数据库,首先测试速度会大大下降,而且让单元测试直接使用外部依赖,很可能带来后续维护的不便,所以有必要对数据库隔离,然后单独测试DAL层.由于使用了ORM ...

  9. Win10 开启便签快捷键

    前提: Win10系统 方法: 开启便签的快捷键:windows+W 这样就可以打开便签,使用起来非常方便

  10. [Android] 锁定屏幕

    最近玩的比较欢脱,欠了好多东西没写.今天先简单地补一篇简单的内容.就是最近涉及到一个锁定Android设备屏幕的设计,大概就是通过一个按钮或者服务消息,来控制设备界面完全锁定,不能点击任何东西.感觉上 ...