ECMAScript6 入门-let与const命令
块级作用域
1:let命令声明的变量只在let命令所在的代码块有效--简而言之 大括号既是代码块,也就是说存在块级作用域了.
{
let a =10;
var b =1;
}
a // ReferenceError: a is not defined.
b //
重点:所以let命令很适合在for循环当中,并且for循环的设置循环变量的那个区域是个父级作用域,循环体里面是一个子作用域
注释:下面代码中,变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6,这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); //
//体现功能点:for循环设置循环变量的作用域 与 循环体是不同的作用域
//for循环变量的作用域是循环体的父级作用域
for (let i = 0; i < 3; i++) {
let i = 'abc';
console.log(i);
}
// abc
// abc
// abc
不存在变量提升
1:只要块级作用域内使用let声明了一个变量,那么这个变量就绑定了这个块级作用域,同时因为let命令声明的变量不会发生变量提升,所以在声明之前使用都会报错,也就表明typeof运算符不再是安全,(ES5当中,未声明的变量采用typeof 的时候显示的是undefined,还有声明了但是没有初始化的变量也是undefined,JS高级编程就提示最好声明的时候初始化)
注释:暂时性死区(在变量声明之前使用)
// var 的情况
console.log(foo); // 输出undefined
var foo = 2; // let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
//注释:块级作用域通过let声明了变量tmp,那么在声明之前使用都会报错,而不是调用全局变量
//注释:在块级作用域当中,如果使用了let或者const定义变量,那么必须在定义之后使用,而不管父级作用域是否存在相同的变量
不允许重复声明
1:所以也不能重新声明函数的参数
// 报错
function func(arg) {
let a = 10;
var a = 1;
let arg; // 报错
} // 报错
function func(arg) {
let a = 10;
let a = 1;
let arg; // 报错
}
小提示:JS里面var为什么可以重复声明变量你知道吗?
块级作用域的作用
没有块级作用域导致的问题:
1:内存作用域的变量会覆盖外层变量
2:for循环里面的变量沦为全局变量,我们本想只让i控制循环,但是循环结束以后,i变成了一个全局变量了
优点:
1:IIFE不再必要了,我们只需要一个块级作用域就可以了,里面的变量采用let命令声明就行
2:ES6 规定,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用
小提示:ES5规定,函数声明只能在全局作用域和函数级作用域中使用,不能再块级作用域使用,你知道为什么吗?
const命令
1:const命令的基本用法,定义一个不可更改的变量,并且定义的时候需要初始化。
2:const命令声明的变量也只能在所在的代码块中有效,也不存在变量提升,就是存在暂时性死区,同时也不能重复声明,
重点:const定义常量的本质在于,他保证的不是变量的值不能改变,而是变量指向的内存的地址不能改变,对于简单变量来说,值就保存在变量指向的那个地址;但是对于复杂的数据来说,变量指向的地址只是一个指针而已,如果该指针指向的数据结构发生改变,那么其实该数据还是发生改变的,所以用const定义一个对象是很不稳定的。
ES6声明变量的方法六种
分别是var function let const import class
顶层对象的属性
1:顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。
2:ES5 之中,顶层对象的属性与全局变量是等价的
3:ES6规定,var function 声明的变量依旧还是顶层对象的属性,使用let const class 声明的全局变量,不再属于顶层对象了
var a = 1;
// 如果在 Node 的 REPL 环境,可以写成 global.a
// 或者采用通用方法,写成 this.a
window.a // let b = 1;
window.b // undefined
ECMAScript6 入门-let与const命令的更多相关文章
- ECMAScript 6入门 - let和const命令
详细学习链接: http://es6.ruanyifeng.com/#docs/let let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命 ...
- ES6入门——let和const命令
let和const命令 1.let命令 用法:类似于var,用来声明一个变量,区别是所声明的变量只在let命令所在的代码块内有效. let命令很适合用在for循环的计数器中,因为let声明的变量仅在作 ...
- es6语法入门let 和 const 命令
let块级作用域 { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b for循环的计数器,就很合适使用let命令(防 ...
- ECMAScript6 入门教程 初学记录let命令 块级作用域
一.基本语法-let命令 (1)ES6新增了let命令,用来声明变量.所声明的变量,只在let命令所在的代码块内有效. 循环的计数器,就很合适使用let命令.计数器i只在for循环体内有效,在循环体外 ...
- ES6入门之let和const命令
前言 大家好,我是一只流浪的kk,当你看到这边博客的时候,说明你已经进入了ES6学习的领域了,从本篇博客开始,我将会将自己学习到ES6的相关知识进行整理,方便大家参考和学习,那么我将带你进入第一节的内 ...
- ES6 入门系列 - let 和 const 命令
let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = ; ; } a // ReferenceEr ...
- ES6标准入门 第二章:块级作用域 以及 let和const命令
一.块级作用域 1.为什么需要块级作用域? ES5中只有全局作用域和函数作用域,带来很多不合理的场景. (1)内层变量可能会覆盖外层变量: var tem = new Date(); function ...
- 《ES6标准入门》(阮一峰)--2.let 和 const 命令
1.let命令 基本用法 let只在命令所在的代码块内(花括号内)有效. for循环的计数器,就很合适使用let命令. //var var a = []; for (var i = 0; i < ...
- ECMAScript6-let与const命令详解
前言 <ECMAScript入门>是一本开源的JavaScript语言教程,全面介绍ECMAScript6新引入的语法特性. let和const命令,是第一章开始介绍,也是比较基础的知识. ...
随机推荐
- MT【318】分式不等式双代换
已知$a,b>0$且$\dfrac{1}{a}+\dfrac{1}{b}=\dfrac{2}{3}$,求$\dfrac{1}{a-1}+\dfrac{4}{b-1}$的最小值. 解:令$m=\d ...
- 平衡树splay学习笔记#1
这一篇博客只讲splay的前一部分的操作(rotate和splay),后面的一段博客咕咕一段时间 后一半的博客地址:[传送门] 前言骚话 为了学lct我也是拼了,看了十几篇博客,学了将近有一周,才A掉 ...
- license.json
{"license":{"uid":"5359f3d1-8c8c-462b-a17b-b7eb0c3ddb8f","type&qu ...
- 【POJ 3159】Candies&&洛谷P3275 [SCOI2011]糖果
来补一下自己很久以前那个很蒟蒻很蒟蒻的自己没有学懂的知识 差分约束,说白了就是利用我们在求最短路的一个\(relax\)操作时的判断的原理 \[dis[v]>dis[u]+disj(u,v)\] ...
- CodeForces666E Forensic Examination
题目描述 给你一个串S以及一个字符串数组T[1..m],q次询问,每次问S的子串S[pl..pr]在T[l..r]中的哪个串里的出现次数最多,并输出出现次数. 如有多解输出最靠前的那一个. 题解 ...
- Meterpreter提权详解
0x01 Meterpreter自动提权 1.生成后门程序 我们在kali的命令行下直接执行以下命令获得一个针对windows的反弹型木马: msfvenom -p windows/meterpr ...
- postgreSQL学习(二):pgsql的一些基础操作
在上一篇文章中我们学习了怎么安装pgsql,安装好了后,我们来学习一下怎么对pgsql进行创建操作以及相关的crud的操作啦 一 创建数据库 $ createdb test 然后你可能会遇到如下的错误 ...
- PageRank算法--从原理到实现
本文将介绍PageRank算法的相关内容,具体如下: 1.算法来源 2.算法原理 3.算法证明 4.PR值计算方法 4.1 幂迭代法 4.2 特征值法 4.3 代数法 5.算法实现 5.1 基于迭代法 ...
- 怎样以快速样式的方式在word文档中生成以下多级自动编号
本篇博文简单介绍一下在word中利用快速样式生成多级编号的方法. 一.自定义多级列表格式: 1.点击,开始--段落--多级列表--定义新的多级列表: 2.设置一级编号: (1)在"此级的编号 ...
- MySQL学习10 - 多表查询
一.多表连接查询 1.交叉连接 2.内连接 3.外连接之左连接 4.外连接之右连接 5.全外连接 二.符合条件连接查询 三.子查询 1.带in关键字的子查询 2.带比较运算符的子查询 3.带EXIST ...