1. let 和 const 命令
一、简单认识
1. 用let来声明变量,变量作用域就在{}(块级作用域)中
2. 用const声明变量,变量值不可更改
3. 增加了let以后,在声明变量时应该多考虑一下变量的用途,是否希望只在当前代码块中使用(C++就不同了,它声明的变量都是属于当前代码块的)
二、let命令
1. 在{}中用let定义一个变量,只能在该{}中访问
1 {
2 let a = 10;
3 console.log(a);//10
4 }
5 console.log(a);//a is not defined
2. for循环计数中使用let
- 定义的i只在本轮循环中有效,每次新的循环中,i都是重新声明的
1 var a = [];
2 for(let i = 0; i < 10; i++){
3 a[i] = function(){
4 console.log(i);
5 }
6 }
7 a[6]();//6,不是10
- 父子作用域:声明循环变量的是父,而循环体内部是单独的子作用域
1 for(let i = 0; i < 3; i++){
2 let i = "abc";
3 console.log(i);
4 }
5 // 输出三次abc,循环变量i没有被循环体内部定义的i影响
3. 没有变量提升
- 必须先声明才能使用(和C++一致,而var会把变量提升到作用域最上面)
1 bar = 2;
2 let bar;
3 //报错:bar is not defined
4. 暂时性死区
- 在有let命令的作用域中,由let声明的变量在未声明前不可使用(即使它的上层作用域中已经声明)。该作用域中,let声明某变量前都是该变量的死区(不可使用)
var tmp = 123; if (true) {
tmp = 'abc'; //tmp is not defined
let tmp;
}
typeof的问题:未声明前访问也会报错
1 typeof x;//报错:x is not defined
2 let x;
3 typeof y;//"undefined"- 赋值语句中的问题,未声明前的变量不可以给其它变量赋值
let x = x;//x is not defined
function fun(x = y){
}
fun();//y is not defined
5. 不可以重复声明变量
1 let x;
2 let x;//报错:x is already been declared
三、块作用域中声明函数
- 在块作用域中声明函数与var变量类似,会进行变量提升(到函数作用域或全局作用域,而不是块作用域)
- 应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句
1 // 浏览器的 ES6 环境
2 function f() { console.log('I am outside!'); }
3
4 (function () {
5 //var f = undefined;//提升到这里
6 if (false) {
7 //函数f的声明提升到函数作用域或全局作用域头部
8 function f() { console.log('I am inside!'); }
9 }
10 //因为false,所以没对f进行赋值
11 f();//f is not a function
12 }());
四、const命令
- 一旦声明,必须立即初始化
- 与let相似的特性:块级作用域、不提升、暂时性死区、不可重复声明
- 指向的内存地址不可变,但内存的内容可以变
1 const a = [];
2 a.push('Hello'); // 可执行
3 a.length = 0; // 可执行
4 a = ['Dave']; // 报错,不可以修改const变量的指向
五、顶层对象属性
- 顶层对象,在浏览器环境指的是
window
对象,在 Node 指的是global
对象 - let、const声明的变量不属于顶层对象的属性
1 var a = 1;
2 window.a;//1
3 function b(){
4 console.log("b");
5 }
6 window.b();//b
7
8 let c = "c";
9 window.c;//undefined
10 const d = "d";
11 window.d;//undefined
1. let 和 const 命令的更多相关文章
- es6学习笔记(1) let和const命令详解
let和const命令: Es6新增了let命令,声明变量,但与var不一样的,只在let命令所在的代码块内有效(如for循环之外let声明的变量就不再有效).并且let不像var那样会发生" ...
- let和const命令//////////////////////z
let和const命令 let命令 块级作用域 const命令 全局对象的属性 let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的 ...
- ES6之let(理解闭包)和const命令
ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,E ...
- ECMAScript 6入门 - let和const命令
详细学习链接: http://es6.ruanyifeng.com/#docs/let let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命 ...
- ES6 入门系列 - let 和 const 命令
let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = ; ; } a // ReferenceEr ...
- ES6 之 let和const命令 Symbol Promise对象
ECMAScript 6入门 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了. (2016年6月,发布了小幅修订的<ECMASc ...
- ECMAScript6-let和const命令
▓▓▓▓▓▓ 大致介绍 ES6是下一代的JavaScript语言的标准,目标是让JavaScript可以用来编写大型的复杂程序,成为企业级开发语言,要查看浏览器对ES6的支持程度可以用阮一峰大佬写的工 ...
- ECMAScript6-let与const命令详解
前言 <ECMAScript入门>是一本开源的JavaScript语言教程,全面介绍ECMAScript6新引入的语法特性. let和const命令,是第一章开始介绍,也是比较基础的知识. ...
- let和const命令
let命令 1.let用来声明变量,类似于var,但只在代码块内有效. { let a = 1; var b = 2; } console.log(a); //a is not defined con ...
- ECMAScript 6 第一天 let和const命令
ES6新增声明变量的方法let命令,const命令. (ES5只有两种声明变量的方法:var 命令和 function 命令.) let命令,用来声明变量. 与var声明变量不同于: 1. let声 ...
随机推荐
- P1963 [NOI2009]变换序列
对于\(N\)个整数\(0, 1, \cdots, N-1,\)一个变换序列\(T\)可以将\(i\)变成\(T_i\),其中 \(T_i \in \{ 0,1,\cdots, N-1\}\)且 \( ...
- python中迭代器和生成器的区别
#!/usr/bin/python def power(values): for value in values: print "powing %s" % value yield ...
- Hadoop生态圈-使用Ganglia监控flume中间件
Hadoop生态圈-使用Ganglia监控flume中间件 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Ganglia监控简介 加州伯克利大学千禧计划的其中一个开源项目.是一 ...
- 【转载】Etcd+Confd实现Nginx配置文件自动管理
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lizhenliang.blog.51cto.com/7876557/191015 ...
- VUE2.0 饿了吗视频学习笔记(四):颜色、跳转、设置、vue-resource
https://gitee.com/1981633/vue_study.git 源码下载地址,随笔记动态更新中 1.设置选中项颜色 <template> <div id=" ...
- ettercap中间人攻击--参数介绍
攻击和嗅探 -M, --mitm ARP欺骗,参数 -M arp remote # 双向模式,同时欺骗通信双方,-M arp:remote. oneway #单向模式,只arp欺骗第一个 ...
- 时间轴QTimeLine
一个动画由多张静态图片组成,每一张静态图片为一帧.每隔一定时间显示一帧,如果时间间隔非常短的话,那这些静态图片就会构成一个连续影像,动画由此而来.QTimeLine提供了用于控制动画的时间轴,它在实现 ...
- JavaScript之数值计算
//两等长数组对应元素之间做减法运算[可拓展:基本运算(+/-*//)] function array_dif(length,arrayA,arrayB){ var array = new Array ...
- [C++]指针与引用(定义辨析)
1.定义: 1.1 &-----取地址运算符 功能:返变量的内存地址 Eg:int *p,m; 定义p为指向int类型变量的指针,同时定义变量m ...
- 寻路优化(二)——二维地图上theta*算法的设计探索
这篇文章是基于上一篇文章的研究上进行的,使得路径更加的平滑和自然,特此记录.有错误欢迎大家批评指正.如需转载请注明出处,http://www.cnblogs.com/Leonhard-/p/68660 ...