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. PAT甲题题解-1088. Rational Arithmetic (20)-模拟分数计算

    输入为两个分数,让你计算+,-,*,\四种结果,并且输出对应的式子,分数要按带分数的格式k a/b输出如果为负数,则带分数两边要有括号如果除数为0,则式子中的结果输出Inf模拟题最好自己动手实现,考验 ...

  2. 读书笔记(chapter1-2)

    一.linux内核简介 1.1unix的历史 1.unix强大的根本原因:1.unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的:2.在unix中,所有的东西都被当作文件对待:3.un ...

  3. linux下php环境的装配以及php storm的链接

    linux下php环境的装配以及php storm的链接 本次安装在deepin系统下完成 一.安装LAMP组合 Linux+Apache+Mysql+php 直接命令 sudo apt-get in ...

  4. squid介绍和作用

    介绍 squid服务程序是一款在Unix系统中最为流行的高性能代理服务软件,通常会被当作网站的前置缓存服务,用于替代用户向网站服务器请求页面数据并进行缓存,通俗来讲,Squid服务程序会接收用户的请求 ...

  5. Beta 冲刺 六

    团队成员 051601135 岳冠宇 031602629 刘意晗 031602248 郑智文 031602330 苏芳锃 031602234 王淇 照片 项目进展 岳冠宇 昨天的困难 ActionBa ...

  6. Linux命令(十七) 关机命令

    在 Linux 系统下一些常用的关机/重启命令有 shutdown.halt.reboot以及init,他们都可以达到重启系统的目的,但每个命令的内部工作过程不同. 一.使用 shutdown 关机或 ...

  7. laravel 处理自定错误页面,如404,500,501,502,503,504等等

    laravel 5.0 版本下,修改pp/Exceptions/Handler.phppublic function render($request, Exception $e) { if ($e i ...

  8. 深入解读Quartz的原理

     Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便.   一.核心概念   Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.   1 ...

  9. 在vue中使用weixin-js-sdk自定义微信分享效果

    在做微信分享的时候,产品要求分享效果要有文字和图片,使用weixin-js-sdk解决了, 原始的分享效果: 使用微信JS-SDK的分享效果: 首先需要引入weixin-js-sdk npm inst ...

  10. 对象内存空间 在创建对象后 运行时 会把对象的方法放到jvm的方法区中 调用时 将方法拿到栈中 执行完后 这个方法会出栈 然后新的方法方法进栈