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; // 私有变量 , 其他类无法访问,只能够该类内部 ...
随机推荐
- Spring Boot 实战 —— MyBatis(注解版)使用方法
原文链接: Spring Boot 实战 -- MyBatis(注解版)使用方法 简介 MyBatis 官网 是这么介绍它自己的: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过 ...
- VsCode 解决vim插件,不能使用ctrl+c的问题(目标卸载im)
VsCode中,使用VIM插件后,ctrl+c不能用 可以通过 File -> Preference -> Settings中 vim.useCtrlKeys 选项设置为 false ...
- 通过Git和GitHub项目管理
用Git来管理代码文件 安装环境 windows 首先是安装git: 1.到git官网下载一个安装包 2.安装git,详细过程略 3.打开项目文件夹,并鼠标右击,打开git bash 4.从未使用过g ...
- Fortify漏洞之 Log Forging(日志伪造)
继续对Fortify的漏洞进行总结,本篇主要针对 Log Forging(日志伪造)的漏洞进行总结,如下: 1.1.产生原因: 在以下情况下会发生 Log Forging 的漏洞: 1. 数据从一个不 ...
- vue + element ui开发过程中需要注意的几个点
1.实现动态的数据双向绑定 关键字[$set]在这个需求开发的过程中还遇到深度克隆的问题 2:form表单的动态字段验证 关键字[promise.all] 3:动态表单验证关键字[el-form-it ...
- 版本管理工具Git三种工作流
Git是分布式版本管理控制的工具.学习Git一般都是先去学习Git的命令. 但是学习完Git的基本命令之后还是不知道怎样使用Git.首先,我们要清楚的 一点是Git的使用方法其实有很多种,也就是说Gi ...
- linux之expect用法
1. [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来执行.这里的expect其实和linux下的bash.windows下的cmd是一类东西. 注意:这一 ...
- php 执行大量sql语句 MySQL server has gone away
php 设置超时时间单位秒 set_time_limit(3600); php 设置内存限制ini_set('memory_limit', '1024M'); mysql服务端接收到的包的大小 ...
- ssmtp脚本发中文邮件的笔记
( echo "From:<test@abc.com>"; \ echo "TO:def@abc.com"; \ echo "Subjec ...
- 利用ssh的用户配置文件config管理ssh会话
通常利用 ssh 连接远程服务器,一般都要输入以下类似命令: ssh user@hostname -p port 如果拥有多个 ssh 账号,特别是像我这种喜欢在终端里直接 ssh 登陆,不用 PuT ...