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 ...
随机推荐
- PAT甲题题解-1088. Rational Arithmetic (20)-模拟分数计算
输入为两个分数,让你计算+,-,*,\四种结果,并且输出对应的式子,分数要按带分数的格式k a/b输出如果为负数,则带分数两边要有括号如果除数为0,则式子中的结果输出Inf模拟题最好自己动手实现,考验 ...
- 读书笔记(chapter1-2)
一.linux内核简介 1.1unix的历史 1.unix强大的根本原因:1.unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的:2.在unix中,所有的东西都被当作文件对待:3.un ...
- linux下php环境的装配以及php storm的链接
linux下php环境的装配以及php storm的链接 本次安装在deepin系统下完成 一.安装LAMP组合 Linux+Apache+Mysql+php 直接命令 sudo apt-get in ...
- squid介绍和作用
介绍 squid服务程序是一款在Unix系统中最为流行的高性能代理服务软件,通常会被当作网站的前置缓存服务,用于替代用户向网站服务器请求页面数据并进行缓存,通俗来讲,Squid服务程序会接收用户的请求 ...
- Beta 冲刺 六
团队成员 051601135 岳冠宇 031602629 刘意晗 031602248 郑智文 031602330 苏芳锃 031602234 王淇 照片 项目进展 岳冠宇 昨天的困难 ActionBa ...
- Linux命令(十七) 关机命令
在 Linux 系统下一些常用的关机/重启命令有 shutdown.halt.reboot以及init,他们都可以达到重启系统的目的,但每个命令的内部工作过程不同. 一.使用 shutdown 关机或 ...
- laravel 处理自定错误页面,如404,500,501,502,503,504等等
laravel 5.0 版本下,修改pp/Exceptions/Handler.phppublic function render($request, Exception $e) { if ($e i ...
- 深入解读Quartz的原理
Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便. 一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可. 1 ...
- 在vue中使用weixin-js-sdk自定义微信分享效果
在做微信分享的时候,产品要求分享效果要有文字和图片,使用weixin-js-sdk解决了, 原始的分享效果: 使用微信JS-SDK的分享效果: 首先需要引入weixin-js-sdk npm inst ...
- 对象内存空间 在创建对象后 运行时 会把对象的方法放到jvm的方法区中 调用时 将方法拿到栈中 执行完后 这个方法会出栈 然后新的方法方法进栈