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的更多相关文章

  1. ES6学习笔记(一)——let和const

    1.ES6学习之let.const (1).var.let.const 变(常)量声明 ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景. 在ES6中let就诞生了,实际上它 ...

  2. ES6学习笔记(1)----let和const命令

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ let和const命令 let 总结1.声明变量基本使用方法与var 相同  不同点  a.在代 ...

  3. ES6学习笔记之 let与const

    在js中,定义变量时要使用var操作符,但是var有许多的缺点,如:一个变量可以重复声明.没有块级作用域.不能限制修改等. //缺点1:变量可以重复声明 var a=1; var a=2; conso ...

  4. ES6笔记(2)-- let的块级作用域

    系列文章 -- ES6笔记系列 一.函数级作用域 我们都知道,在ES6以前,JS只有函数级作用域,没有块级作用域这个概念 没有块级作用域,有利有弊,利于方便自由,弊于作用域内的变量容易被共享,例如这个 ...

  5. ES6笔记(3)-- 解构赋值

    系列文章 -- ES6笔记系列 解构赋值,即对某种结构进行解析,然后将解析出来的值赋值给相关的变量,常见的有数组.对象.字符串的解构赋值等 一.数组的解构赋值 function ids() { ret ...

  6. ES6 笔记汇总

    ES6 笔记汇总 二.ES6基础-let和const命令 三.变量的解构赋值 四.字符串的拓展 五.正则表达式的拓展 ...将会持续更新,敬请期待

  7. ES6笔记2

    ES6笔记2 Promise Promise 是 ES6 引入的异步编程的新解决方案,语法上是一个构造函数 一共有3种状态,pending(进行中).fulfilled(已成功)和rejected(已 ...

  8. ES6笔记(5)-- Generator生成器函数

    系列文章 -- ES6笔记系列 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还 ...

  9. ES6笔记系列

    ES6,即ECMAScript 6.0,ES6的第一个版本是在2015年发布的,所以又称作ECMAScript 2015 如今距ES6发布已经一年多的时间,这时候才去学,作为一个JSer,羞愧羞愧,还 ...

  10. 《OOC》笔记(1)——C语言const、static和extern的用法

    <OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用c ...

随机推荐

  1. gym101522 [小熊骑士限定]La Salle-Pui Ching Programming Challenge 培正喇沙編程挑戰賽 2017

    西瓜队(划掉),Kuma Rider久违的第一场训练,四小时瞎打.jpg A.水题,排序 #include<cstdio> #include<iostream> #includ ...

  2. 新手向:从不同的角度来详细分析Redis

    最近对华为云分布式缓存产品Redis做了一些研究,于是整理了一些基本的知识拿出来与大家分享,首先跟大家分享的是,如何从不同的角度来详细使用Redis. 小编将从以下9个角度来进行详细分析,希望可以帮到 ...

  3. 华为云Istio服务网格,让应用治理智能化、可视化

  4. alpha冲刺随笔(一)

    项目Alpha冲刺(团队) Alpha冲刺第一天 姓名 学号 博客链接 何守成 031602408 http://www.cnblogs.com/heshoucheng/ 黄锦峰 031602411 ...

  5. jar 命令详解

    jar 是随 JDK 安装的,在 JDK 安装目录下的 bin 目录中,Windows 下文件名为 jar.exe,Linux 下文件名为 jar.它的运行需要用到 JDK 安装目录下 lib 目录中 ...

  6. JS 中的require 和 import 区别

    这两个都是为了JS模块化编程使用. 遵循规范 require 是 AMD规范引入方式 import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法 调用时间 require是运行时调 ...

  7. java通过dom读写xml文件

    java通过dom读写xml文件 要读的xml文件 <?xml version="1.0" encoding="GB2312"?><学生花名册 ...

  8. pgm6

    有个比较有意思的想法是编码理论的反问题是 machine learning,这也是这部分学习的一个收获.这个其实很奇怪,编码理论其实是有 ground truth 的,然后通过编码产生“冗余”,这样才 ...

  9. BZOJ1018 SHOI2008堵塞的交通(线段树)

    动态图的连通性当然是可以用LCT维护的.但这相当的不优美,毕竟这样做没有用到任何该图的性质,LCT自带的大常数也会使其跑得非常慢. 考虑用线段树维护区间左右端四个点之间各自的连通性(仅经过该区间内路径 ...

  10. Ryuji doesn't want to study 2018 徐州赛区网络预赛

    题意: 1.区间求 a[l]×L+a[l+1]×(L−1)+⋯+a[r−1]×2+a[r](L is the length of [ l, r ] that equals to r - l + 1) ...