1、ES6声明变量的方式
1、es5的声明方式var的问题
1)是var在同一个作用域内部,是可以重复声明一个变量的,后面的会把前面的覆盖掉
2)var存在变量提升到的问题,就是在使用var声明变量前是可以先使用此变量的
2、let与var的不同的特点
1)let不能重复声明
2)let是不存在变量提升
3)块级作用域存在暂存死区(即这个区域不能存在同名的变量了,已经是将这个区域与这个变量绑定了)
在es5中if的括号不是一个块级作用域,所以下面的例子中的打印是执行的
if ( false ){
var lagev = 'jkgba';
}
console.log(lagev);//undefined 类似于下面:
var lagev ;
if ( false ){
lagev = 'jkgba';
}
console.log(lagev); 但是使用let声明时,是存在块级作用域的,只能在作用域内部访问
if ( false ){
let lagev = 'jkgba';
}
console.log(lagev);//报错,未定义
另外一个是在for循环的例子
for(var i=0; i<3; i++){
//....
}
console.log(i) ; //此时打印出i是为3的,因为var声明的 i 是一个全局变量,每次循环都会使用同一个 i 而使用let做循环时,每次的循环体都是一个块级作用域,每次的循环都会重新声明一个块级作用域内的变量 i,并且会把上一次的值作为下次声明的初始值,,即每次循环的i值是和当前的循环体绑定的
for( let i=0; i<3; i++){
document.addEventListener('click',function(){
alert(i); //此时的 i 就是0、1、2了
})
} 这个问题如果使用es5中的var来实现的话,就需要使用闭包了,把每次的i值保存下来,实际上使用let进行编译之后也是用的闭包实现的,所以let的性能可能会比var差一些,
不过现在Chrome的V8引擎性能很强大,并且还在不断的做优化
3、es6中新增了声明常量
声明赋值之后不能改变,并且特性是同let
const ULIR = 10;
ULIR = 2; //此时会报错,类型错误
一般项目中是用于引入模块,不希望再改变的
1、ES6声明变量的方式的更多相关文章
- ECMAScript 6 入门——ES6 声明变量的六种方法
ES6 声明变量的六种方法 ES5 只有两种声明变量的方法:var命令和function命令.ES6 除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和cla ...
- JavaScript 一、 ES6 声明变量,作用域理解
// JavaScript/* * ========================================================= * * 编译原理 * 尽管通常将 JavaScr ...
- ES6 声明变量的6种方法
ES5 只有两种声明变量的方法:var命令和function命令. ES6除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令.所以,ES6 一共 ...
- ES6 声明变量的六种方法
ES5 只有两种声明变量的方法: var 命令和 function 命令. ES6 除了添加 let 和 const 命令, 后面章节还会提到, 另外两种声明变量的方法: import 命令和 cla ...
- 【ES6 】声明变量的方式
var function let const import class
- es6 新增变量声明方式
let 与 var var var声明的变量拥有全局作用域或者局部作用域 在全局中声明变量即为全局变量 在函数中声明变量即为局部变量 而var在使用过程中也逐渐暴露出许多问题 var的几大问题 变量提 ...
- IOS OC声明变量在@interface括号中与使用@property的区别
方式一:直接在@interface中的大括号中声明. @interface MyTest : NSObject{ NSString *mystr; } 方式二:在@interface中声明,然后再在@ ...
- IOS OC声明变量在@interface括号中与使用@property的区别(转载)
刚开始接触OC再看别人写的代码的时候,常常困惑于人家在声明属性时的写法,总结出来有三中方式,不知道哪一种比较规范化,现在我把三种方式贴出来,然后再一一探讨每个方式声明属性的区别. 方式一:直接在@in ...
- 【学习总结】声明变量在@interface括号中与使用@property的区别
方式一:直接在.h文件@interface中的大括号中声明. @interface Test : NSObject { NSString *str; // 私有变量 , 其他类无法访问,只能够该类内部 ...
随机推荐
- Android studio来开发移动App--SQA计划和系统测试规程
概述 团队分工 产品需求 团队合作 每日例会 思维导图 UML 产品代码 团队分工 成员:刘鹏芝,罗樟,王小莉,沈兴艳,徐棒,彭康明,胡广键 产品用户:王小莉 需求规约:彭康明,罗樟 UML:刘鹏芝, ...
- UML类图的几种关系总结
本文摘自:UML类图关系总结 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregati ...
- 用PL/SQL工具连接Oracle数据库的时报错:ORA-12638: 身份证明检索失败的解决方法
本地客户端用PLSQL Developer连接远程数据库时提示: ORA-12638: 身份证明检索失败!!! 解决方法一: 此目录下F:\myorcl\product\11.2.0\client_1 ...
- RestTemplate对象,进行get和post简单用法
如果只是针对纯Rest接口处理的话,我们可以使用restTemplate对象来操作,简单方便,可以不需要手写httpClient代码了. 我们看下基本的用法,如下: 1.getForObject cl ...
- keil5工程移植到IAR工程
keil5工程移植到IAR工程 一. 软件版本 MDK-ARM Professional Version: 5.14.0.0 IAR 8.1 移植工程:基于正点原子开发板建立的STM32F407ZG ...
- [ipsec][strongswan] strongswan源码分析--(一)SA整体分析
strongswan SA分析(一) 1 概念 下面主要介绍两个本文将要阐述的核心概念.他们是SA和SP.注意,这不是一篇不需要背景知识的文章.作者认为你适合阅读接下来内容的的前提是,你已经具备了一下 ...
- 资源管理与调度系统-资源管理系统Mesos
资源管理与调度系统-资源管理系统Mesos 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Mesos是诞生于UC Berkeley的一个研究项目,它的设计动机是解决编程模型和计算框 ...
- 在vue中使用jsx语法
什么是JSX? JSX就是Javascript和XML结合的一种格式.React发明了JSX,利用HTML语法来创建虚拟DOM.当遇到<,JSX就当HTML解析,遇到{就当JavaScript解 ...
- docer安装之pure-ftp
https://hub.docker.com/r/stilliard/pure-ftpd Docker Pure-ftpd Server https://hub.docker.com/r/stilli ...
- Java synchronized实现原理总结和偏量锁、轻量锁、重量锁、自旋锁
synchronized实现同步的基础:Java中的每一个对象都可以作为锁.具体表现为以下3种形式. 对于普通同步方法,锁是当前实例对象(this). 对于静态同步方法,锁是当前类的Class对象. ...