es6中的变量声明
es6中的变量声明
变量的声明
for (var i = 0; i < 5; i++) {
console.log(i)
}
var声明
作用域问题
上面的就是一个简单的for循环语句,在每次循环变量i的时候答应当前i的值.但是在上面的代码基础上加入几行,我们再试试看。
for (var i = 0; i < 5; i++) {
console.log(i)//0,1,2,3,4
}
console.log(i)//5
console.log(window.i)//5
你会发现变量i的值还是会被答应出来,更加过分的是在全局变量window上面竟然也可以拿到变量i的值,这很显然是不严谨的,也不是我们想要的,于是es6就对变量声明有了下面的修改。
重复声明问题
看下面的代码:
var a=1;
var a=2;
这样声明的变量不会报错,es5中会解析成下面的代码:
var a;
a=1;
a=2;
let声明
作用域问题
在es5中我们使用let关键字来声明变量。还是同样的代码,我们看看有什么不一样的效果:
for (let i = 0; i < 5; i++) {
console.log(i)//0,1,2,3,4
}
console.log(i)//i is not defined
console.log(window.i)//undefined
你会发现在for循环内部我们依然可以拿到每次的打印结果,这是正确的,也是我们所期望的,但是。在循环体之外就不能获取到变量i了,提示错误为未定义,全局变量上也不能获取i的值。这是因为在es6中引入了模块的概念,我们可以认为整个for循环是一个模块,在模块内部声明的变量只能在模块里面用。你也可以认为es6隐式的帮我们在for循环之外加入一个自执行函数:
(function () {
for (var i = 0; i < 5; i++) {
console.log(i)//0,1,2,3,4
}
}
)()
console.log(i)//i is not defined
这样变量就不是声明在全局,也就不会被全局污染了。
重复声明问题
let a=1;
let a=2;
但是在es6中上面说到的作用域问题,所以es6中并不会存在变量提升的问题,也就是说你相当于重复声明了变量a,所以会报错。‘'a' has already been declared’
const声明
const 引入了常量的概念,常量一般为固定的值是不能修改的,提示常量不能被修改(Assignment to constant variable.)
const a=1;
a=2;
但是const不能修改的是这个值的引用空间,如果代码这样写,就不会报错:
const a = { name: 'hello', age: 0 };
a.age = 1;
console.log(a)//{ name: 'hello', age: 1 }
es6中的变量声明的更多相关文章
- ES6中的变量结构赋值
小编的上一篇文章更新了es6中关于变量定义的问题,这篇文章继续来一些实用的干货,关于数组.对象的赋值问题.特别是在前后端合作项目的时候,对后端数据的拆分,还有就是对于函数的默认值的惰性赋值问题.看完下 ...
- ES6中6种声明变量的方法
相关阅读:http://es6.ruanyifeng.com/#docs/let 相关阅读:https://www.cnblogs.com/ksl666/p/5944718.html 相关阅读:htt ...
- Nodejs与ES6系列1:变量声明
1.声明变量 在JS当中一个变量的作用域(scope)是程序中定义这个变量的区域.变量分为两类,全局(global)的和局部的.其中全局变量的作用域是全局性的,即在JavaScript代码中,它处处都 ...
- ES6系列之变量声明let const
ES6也出来好久了,最近闲来无事就想着吧es6做一个系统的总结,巩固自己的知识,丰富一下博客. 为什么叫ES6 实际上是ECMA的一个打的标准,这个标准是在2015年6月发布的,正式的名字实际是es2 ...
- js 中的变量声明提前总结
一.var 声明 ES6之前,js 中声明变量基本上用 var 关键字: 1.如果访问未声明的变量,会报错:ReferenceError 2.声明了未赋值,值为 undefined,跟前面的报错是两回 ...
- ES6的强大变量声明
ES6是javascript的新特性,今天来说说声明变量 过去我们声明变量,都是一个一个声明,现在有了一种新的声明方式,它可以将一个多个变量同时声明,声明后变量同时存在一个集合中,集合的数据类型是对象 ...
- Js中有关变量声明和函数声明提升的问题
在ECMAScript5中没有块级作用域一说,只有函数作用域和全局作用域,在其中声明的变量和函数和其他语言的展现形式不同,在某些情况下不一定需要先定义后使用,函数和变量的使用可以在其声明之前,这到底是 ...
- ES6和ES5变量声明的区别(var let const)
// es5的语法与es6的语法区别 // var let const console.log(name);//undefine,不会报错,因为变量声明会提到作用域的最前面 var name=&quo ...
- [JavaScript]JS中的变量声明与有效域
1.变量声明 var a = 1; //使用var声明变量 b = 1; //不使用var 第一种情况,在当前域中声明一个名为a的变量,如果实在方法内则为局部变量,若在最外层声明则a为全局变量. 第二 ...
随机推荐
- HTTP的一些理解
URI是Uniform Resource Identifier的缩写,统一资源标识符.URI用字符串标识某一互联网资源,而URL标识资源的地点(互联网上所处的位置).可见URL是URI的子集. 典型的 ...
- Unity 行为树-基础
.前言 Unity里面的行为树又名BehaviorTree,最常用在NPC的敌人逻辑中. 二.基础说明(转载) 1.行为树的调用时间为每帧: 2.每个节点的状态只能下面3个中的其一:成功Success ...
- Jenkins +Maven+Tomcat+SVN +Apache项目持续集成构建
详解Jenkins +Maven+Tomcat+SVN +Apache项目持续集成 一:前言 1. Jenkins jenkins版本大全http://mirrors.jenkins-ci.org/ ...
- 提高mysql千万级大数据SQL查询优化30条经验
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 与postgis相关的一些常用的sql
create table NODES (ID SERIAL not null,geometry geography(POINTZ, 4326) null); create table EDGES (I ...
- java里如何实现循环打印出字符或字符数组里的内容
不多说,直接上干货! java里如何实现循环打印出字符里的内容 没写,暂时不会 java里如何实现循环打印出字符数组里的内容 public class test { public static voi ...
- Python踩坑之旅其一杀不死的Shell子进程
目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 坑后扩展 1.4.1 扩展知识 1.4.1 技术关键字 1.5 填坑总结 1.1 踩坑案例 踩坑的程序是个常驻的Agent类管理进程 ...
- Java微信公众平台开发(十)--微信用户信息的获取
前面的文章有讲到微信的一系列开发文章,包括token获取.菜单创建等,在这一篇将讲述在微信公众平台开发中如何获取微信用户的信息,在上一篇我们有说道微信用户和微信公众账号之间的联系可以通过Openid关 ...
- linux系统redis配置环境变量
1.测试:在任何位置登录redis redis-cli 指定服务器ip(不指定时,默认本机) redis-cli -h 127.0.0.1 指定端口(不指定时,默认6379) redis-cli -h ...
- Vue provide/inject 部分源码分析 实现响应式数据更新
provide/inject 数据响应式更新的坑及源码解析 下面是我自己曾经遇到 一个问题,直接以自己QA的形式来写吧 自问自答了,需要的同学也可以直接访问segmentfault地址 官网给出实例, ...