1. let命令

1.1 用法

ES6 新增let命令来声明变量,它的用法类似于 var,但是let所声明的变量,仅仅在它声明的代码块里面有效

{
let a = 10;
var b = 100;
}
a //报错:a is not define
b //100

1. 2 不存在变量提升

var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。

let改变了语法行为,它所声明的变量一定要在声明之后才可以使用,否则报错

console.log(c);			//undefined
//console.log(d); //报错
var c = 1000;
let d = 888; console.log(d); //888

1.3 区域绑定

使用 let声明的变量,就绑定在它所声明的这个区域,不受外部的影响

var temp = 'abc';
if(true){
temp = 123;
let temp;
}
//报错:在 Let 声明的变量,需要在声明之后才能使用,且外部声明的temp变量,对语句块里面声明的temp变量不会有任何影响

1.4 不允许重复声明

let不允许在同一个代码块内,重复声明同一个变量

因此,也不能在函数内部重新声明参数

2. const命令

2.1 用法

const 用来声明一个只读的常量,一旦声明,常量的值就不能发生变化

const 声明的变量,必须在声明的时候就赋值,否则报错

2.2 与let类似的特性

  • const作用域和let相同:只在声明的块级作用域内有效
  • constlet一样不存在变量提升:只能在声明之后使用
  • constlet一样,存在区域绑定:不受外部变量的影响
  • 不可重复声明

2.3 const本质

const实际保证的不是变量的值不发生改变,而是变量的内存地址不发生改变

基本的值:基本的值,值就指向它的内存地址,所以值的改变就等同于地址的改变

复合类型(数组和对象):变量指向的是内存地址,至于它的数据结构,就是不可控制的,即使用const声明的数组或者对象,可以随意的添加和修改内在元素,但是不可更改该数组或对象的指向

示例1:使用 const 声明对象,并给其添加属性值

示例2:使用const声明对象,然后将另一个对象赋值给该变量

2.4 ES6 变量声明的6种方法

ES5中,变量声明只有 varfunction两种方法,

ES6中,添加了 letconst,还有 classimport 两种命令

3. 顶层对象属性

顶层对象,在浏览器中是指window对象

顶层对象的属性与全局变量挂钩,被认为是JavaScript最大的败笔之一

示例:使用顶层对象声明的属性,在全局变量中也可以使用

​ 使用全局变量指定的值,在顶层对象中也可以访问

ES6中规定,var 和 function命令声明的全局变量,依旧是顶层对象的属性。另一方面,let,const,class声明的全局变量,不再属于顶层对象的属性。也就是说,从ES6开始,全局变量和顶层对象属性会逐渐分开

示例:使用var声明的全局变量,依旧是顶层对象的属性

​ 使用 let声明的全局变量,不再属于顶层对象的属性

总结

  1. ES6新增加了 letconst 命令,用来声明变量
  2. 使用 let 和 const 声明的变量
    • 只是在声明他们的代码块里面有效
    • 不存在变量提升
    • 都有区域绑定,不受外部变量的影响
    • 不可重复声明
  3. 使用 const 声明对象类型的数据的时候,注意只要变量的内存地址没有发生变化,对象中的数据可以随意修改
  4. 区别顶层对象和全局变量:在ES5中,全局变量认为是顶层对象的属性,从ES6开始,顶层对象的属性和全局变量会逐渐分开,通过 let,const,class指令声明的变量,不再属于顶层对象的属性

2. ES6基础-let和const命令的更多相关文章

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

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

  2. es6之let和const命令的一些笔记

    let和const命令 let命令 基本用法 let命令用来声明变量,声明的变量只在命令所在的代码块内有效.for循环中很适合使用let命令. 有必要理解的例子: var a = []; for (v ...

  3. ES6中let与const命令详解

    阮一峰ES6入门 let 作用域 let命令用来声明变量,但声明的变量只在let命令所在的代码块内有效. { let a = 10; var b = 1; } a // ReferenceError: ...

  4. ES6入门——let和const命令

    let和const命令 1.let命令 用法:类似于var,用来声明一个变量,区别是所声明的变量只在let命令所在的代码块内有效. let命令很适合用在for循环的计数器中,因为let声明的变量仅在作 ...

  5. ES6的let和const命令

    刚开始学习es6,心里有点方,因为看了前言,感觉要用什么bebal来翻译成es5的代码,才能在各个平台上兼容运行,还有node各种运行环境. 不过自己也去百度了一些,发现还是有一丢丢的困难. 言归正传 ...

  6. ES6的let和const命令(一)

    2019独角兽企业重金招聘Python工程师标准>>> ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变 量,只在let命令所在的代码块内有效. let   ...

  7. ES6 let和const命令(3)

    const 用来声明常量.一旦声明,就不能改变. const在声明必须初始化,只声明不赋值会出错 const的作用域与let一样,只在声明的块级作用域有效. const命令声明的常量也不提升,同样存在 ...

  8. ES6简介之let和const命令解说

    一.var申明变量 学习过JavaScript的同学都应该知道,ES5中申明变量使用var,ES5中的var可以说是无所不能的,所有类型的变量都是由var来申明,但往往很多使用者不知道var申明的变量 ...

  9. ES6之新增const命令使用方法

    hi,我又回来了,今天学习一下const命令. 声明一个常量 const声明一个只读常量,一旦声明,常量的值便不可改变. 例子如下: const food = 12; food = 23; // Un ...

随机推荐

  1. jQuery的zTree插件

    写在前面 jQuery的 zTree插件 关键代码 <%@ page language="java" contentType="text/html; charset ...

  2. 【NWJS】解析node-webkit(NWJS)的打包和发布

    目录结构: contents structure [-] 下载和安装node-webkit 建立一个简单的WEB应用 生成EXE可执行文件 修改icon 封包 Enigma Virtual Box I ...

  3. odoo开发笔记 -- odoo权限管理

    odoo框架 整体权限可以分为4个级别: (1) 菜单级别: 不属于指定菜单所包含组的用,看不到相应菜单.不安全,只是隐藏菜单,若用户知道菜单ID,仍然可以通过指定URL访问(2) 对象级别: 对某个 ...

  4. angular的路由例子

    app.routing.module.ts里面,关键部分 const routes: Routes = [ { path: '', redirectTo : 'c3/c2/mmc', pathMatc ...

  5. 第一节:Python+Selenium环境搭建

    一.selenium工作原理 二.安装python Window系统下,python的安装很简单.访问python.org/download,下载最新版本,安装过程与其他windows软件类似.记得下 ...

  6. C#实现通过HttpWebRequest发送POST请求实现网站自动登陆

    C#实现通过HttpWebRequest发送POST请求实现网站自动登陆   怎样通过HttpWebRequest 发送 POST 请求到一个网页服务器?例如编写个程序实现自动用户登录,自动提交表单数 ...

  7. Generate a Certificate Signing Request (CSR) in macOS Keychain Access

    macOS 10.14 (Mojave) 1. Open the Keychain Access application, located at /Applications/Utilities/Key ...

  8. 各种转码(bytes、string、base64、numpy array、io、BufferedReader )

    bytes 与 string 之间互转 Python3 最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分.文本总是 Unicode,由str类型表示,二进制数据则由 bytes 类型表示. ...

  9. 零起点PYTHON足彩大数据与机器学习实盘分析

    零起点PYTHON足彩大数据与机器学习实盘分析 第1章 足彩与数据分析 1 1.1 “阿尔法狗”与足彩 1 1.2 案例1-1:可怕的英国足球 3 1.3 关于足彩的几个误区 7 1.4 足彩·大事件 ...

  10. SpringBoot小技巧:修改java可执行jar包内容

    SpringBoot小技巧:修改java可执行jar包内容 情景描述 在生产环境中,有时候我们发现了个小bug,开发迅速修改代码后,很多时候我们不得不重新发布一个新的可执行jar包上去替换掉.但是这样 ...