es6笔记(2) let 和 const
let命令
用来声明一个变量,和var非常类似
- 1.使用let声明的变量,所声明的变量只在命令所在的代码块中有效
{
let a = 1;
console.log(a); // 这里是可以使用的
}
console.log(a); //这里不可以使用
- 2.使用let声明的变量,在欲解析的时候不会被提升。
//使用var声明变量时,可以这样写
console.log(a); // 此时输出 1
var a = 1;
//但是使用let时
console.log(a); // 会报错
let a = 1;
typeof c;
let c = 10; //依然会报错
lef f = 10;
function fn(){
f = 7; //暂时性死去,会报错
let f = 2;
}
- 3.使用let声明的变量,不允许在作用域下声明同一个变量
var a= 1;
let a;
使用场景
//例如这样一段html代码。
<div>
<button>1</button>
<button>2</button>
<button>3</button>
<button>4</button>
</div>
//通过dom操作获取buttion
var btns = document.querySelectAll('button');
如果这样写,每次点击都会打印3.
for(var i=0; i<btns.length; i++){
btns[i].onclick=function(){
console.log(i);
}
}
按照以往惯例解决方案有两种:
- 1.使用dom属性
for(var i=0; i<btns.length; i++){
btns[i].index = 1;
btns[i].onclick=function(){
console.log(this.index);
}
}
- 2.使用闭包
for(var i=0; i<btns.length; i++){
(function(i){
btns[i].onclick=function(){
console.log(i);
}
})(i);
}
现在呢,可以使用let
for(let i=0; i<btns.length; i++){
btns[i].onclick=function(){
console.log(i);
}
}
//在for循环中使用,let声明变量,有一个特别的现象。
//在循环语句之内 是一个父作用域,在循环体之中是一个子作用域。
const 关键字
用来声明一个常量,可以简单理解成一个不可以变化的常量
和let类似,const同样具备let的三种特点。
- 1.所声明的常量在所在代码块中有效
- 2.在欲解析时候不会被提升,需要先定义后使用。
- 3.不允许同一作用域下,声明相同的常量
4.使用const声明常量的时,必须赋值
5.const 实际上保证的并不是变量的值不能改变,而是变量指向的内存地址不能改变。
对于简单数据类型,直接存储的直接是值。
对于复杂数据类型,内存位置虽然没有变化,但是内部的值是可以改变的。
// 例如
const obj = {a:10};
obj.a = 20; //是可以运行的
console.log(obj.a); //此时a = 20
es6笔记(2) let 和 const的更多相关文章
- ES6学习笔记(一)——let和const
1.ES6学习之let.const (1).var.let.const 变(常)量声明 ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景. 在ES6中let就诞生了,实际上它 ...
- ES6学习笔记(1)----let和const命令
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ let和const命令 let 总结1.声明变量基本使用方法与var 相同 不同点 a.在代 ...
- ES6学习笔记之 let与const
在js中,定义变量时要使用var操作符,但是var有许多的缺点,如:一个变量可以重复声明.没有块级作用域.不能限制修改等. //缺点1:变量可以重复声明 var a=1; var a=2; conso ...
- ES6笔记(2)-- let的块级作用域
系列文章 -- ES6笔记系列 一.函数级作用域 我们都知道,在ES6以前,JS只有函数级作用域,没有块级作用域这个概念 没有块级作用域,有利有弊,利于方便自由,弊于作用域内的变量容易被共享,例如这个 ...
- ES6笔记(3)-- 解构赋值
系列文章 -- ES6笔记系列 解构赋值,即对某种结构进行解析,然后将解析出来的值赋值给相关的变量,常见的有数组.对象.字符串的解构赋值等 一.数组的解构赋值 function ids() { ret ...
- ES6 笔记汇总
ES6 笔记汇总 二.ES6基础-let和const命令 三.变量的解构赋值 四.字符串的拓展 五.正则表达式的拓展 ...将会持续更新,敬请期待
- ES6笔记2
ES6笔记2 Promise Promise 是 ES6 引入的异步编程的新解决方案,语法上是一个构造函数 一共有3种状态,pending(进行中).fulfilled(已成功)和rejected(已 ...
- ES6笔记(5)-- Generator生成器函数
系列文章 -- ES6笔记系列 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还 ...
- ES6笔记系列
ES6,即ECMAScript 6.0,ES6的第一个版本是在2015年发布的,所以又称作ECMAScript 2015 如今距ES6发布已经一年多的时间,这时候才去学,作为一个JSer,羞愧羞愧,还 ...
- 《OOC》笔记(1)——C语言const、static和extern的用法
<OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用c ...
随机推荐
- 2019大疆PC软件开发笔试——开关和灯泡两个电路板
题目描述: 小A是一名DIY爱好者,经常制作一些有趣的东西. 今天,小A突然想要来做这样一个东西.小A现在有两块同样大小为n×m,有n×m块大小为1×1小电路板拼成的矩形电路板,假设叫做电路板A和电路 ...
- 大厂面试官:Java工程师的“十项全能”
想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,在面试之前到底需要准备哪些东西呢?面试时面试官想了解你的什么专业技能,以下都是一个合格Java软件工程师所要具备的. 一.专业技能 熟练的 ...
- DevOps架构下如何进行微服务性能测试?
一. 微服务架构下的性能测试挑战 微服务与DevOps 微服务是实现DevOps的重要架构 微服务3S原则 DevOps核心点 微服务架构下的业务特点 亿级用户的平台 单服务业务随时扩容 服务之间存在 ...
- Linux内核分析——第六周学习笔记
进程的描述和进程的创建 前言:以下笔记除了一些讲解视频中的概念记录,图示.图示中的补充文字.总结.分析.小结部分均是个人理解.如有错误观点,请多指教! PS.实验操作会在提交到MOOC网站的博客中写.
- [讲座] Parallel Processing of Graphs
Graph 本次学术前沿讲座由邵斌老师主讲,标题已经揭示了主题:Graph.1.5h的talk,听完自觉意犹未尽.本来以为是一节自己没接触过的图形学的talk,没想到讲的很多内容都跟自己学过的很多东西 ...
- C语言入门:06.基本运算
一.算术运算 C语言一共有34种运算符,包括了常见的加减乘除运算 1. 加法运算+ 除了能做加法运算,还能表示正号:+5.+90 2.减法运算- 除了能做减法运算,还能表示符号:-10.-29 3. ...
- PHP4个载入语句的区别
4个载入语句的区别 include和require的区别: include载入文件失败时(即没有找到该文件),报一个“提示错误”,然后继续执行后续代码: requre载入文件失败时,报错并立即终止执行 ...
- 在静态方法和非静态方法上加 Synchronized的区别
Synchronzied 修饰非静态方法==>对象锁 Synchronzied 修饰静态方法==>其实是类锁,因为是静态方法,它把整个类锁起来了: 1.Synchronized修饰非静态方 ...
- CSS文字过多显示省略号
CSS文字过多显示省略号 /*-webkit-line-clamp用来限制在一个块元素显示的文本的行数*/ .dot1{ width: 100%; display: -webkit-box; -web ...
- 【题解】 bzoj1207: [HNOI2004]打鼹鼠 (动态规划)
bzoj1207,懒得复制,戳我戳我 Solution: 挺傻逼的一个\(dp\),直接推就好了 这题在bzoj上的数据有点问题,题目保证每个时间点不会出现在同一位置两个地鼠,然而他有= =(还浪费我 ...