ES6简介之let和const命令解说
一、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命令解说的更多相关文章
- ES6 入门系列 - let 和 const 命令
let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = ; ; } a // ReferenceEr ...
- ES6学习之-let 和const命令
let 和const命令 let命令 用来声明变量,类似于var .let声明的变量 只在let命令所在的代码块内有效. 在for循环里也是如此 每次循环其实都是一个代码块 function fn() ...
- ES6入门之let和const命令
前言 大家好,我是一只流浪的kk,当你看到这边博客的时候,说明你已经进入了ES6学习的领域了,从本篇博客开始,我将会将自己学习到ES6的相关知识进行整理,方便大家参考和学习,那么我将带你进入第一节的内 ...
- 【ES6基础】let、const命令和变量的结构赋值
ES5声明变量(2):var .function ES6声明变量(6):var.function.let.const.import和class 1.let命令和const命令 (1)let和const ...
- es6语法入门let 和 const 命令
let块级作用域 { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b for循环的计数器,就很合适使用let命令(防 ...
- ES6 第一章 let和const命令 具体参照http://es6.ruanyifeng.com
1.let类似于var用用来定义变量 1)let没有预解析,不存在变量提升 // var 的情况 console.log(foo); // 输出undefined var foo = 2; // le ...
- ES6 常用总结——第一章(简介、let、const)
ES6整理 1. ECMAScript 6简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准.它的目标,是使得 JavaScript 语言可以用来编写复杂 ...
- ES6 之 let和const命令 Symbol Promise对象
ECMAScript 6入门 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了. (2016年6月,发布了小幅修订的<ECMASc ...
- ES6学习笔记(1)----let和const命令
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ let和const命令 let 总结1.声明变量基本使用方法与var 相同 不同点 a.在代 ...
随机推荐
- java多线程框架
JDK5中的一个亮点就是将Doug Lea的并发库引入到Java标准库中.Doug Lea确实是一个牛人,能教书,能出书,能编码,不过这在国外还是比较普遍的,而国内的教授们就相差太远了. 一般的服务器 ...
- Codeforces343D(SummerTrainingDay06-F dfs序+线段树)
D. Water Tree time limit per test:4 seconds memory limit per test:256 megabytes input:standard input ...
- Code Signal_练习题_extractEachKth
Given array of integers, remove each kth element from it. Example For inputArray = [1, 2, 3, 4, 5, 6 ...
- js字符串如何倒序
1. var reverse = function( str ){ var newStr = '', i = str.length; for(; i >= 0; i--) { newStr += ...
- python-命令模式
源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 命令在发送方被激活,而在接收方被响应.一个对象既可以作为命令的发送方,也可以作为 ...
- js-ES6学习笔记-Promise对象(2)
1.Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的.它的作用是为Promise实例添加状态改变时的回调函数. 2.Promise.pr ...
- Hibernate 中配置属性详解(hibernate.properties)
Hibernate能在各种不同环境下工作而设计的, 因此存在着大量的配置参数.多数配置参数都 有比较直观的默认值, 并有随 Hibernate一同分发的配置样例hibernate.properties ...
- bootstrap和ajax相结合
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 微信小程序开发--模板(template)使用,数据加载,点击交互
微信小程序视图层提供了 模板(template),可以在模板中定义代码片段,然后在不同的地方调用.结果在数据渲染那懵逼了.按照官网上对模板的说明和对数据的加载. 1.定义模板 使用name属性,作为模 ...
- Android比较实用的性能优化
Android设备作为一种移动设备,无论是内存还是CPU的性能都受到了很大的限制,这导致Android程序的性能问题异常突出,随着产品的不断更新迭代,对于性能优化提出了更高的要求.本篇文章从稳定性.流 ...