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中的变量声明的更多相关文章

  1. ES6中的变量结构赋值

    小编的上一篇文章更新了es6中关于变量定义的问题,这篇文章继续来一些实用的干货,关于数组.对象的赋值问题.特别是在前后端合作项目的时候,对后端数据的拆分,还有就是对于函数的默认值的惰性赋值问题.看完下 ...

  2. ES6中6种声明变量的方法

    相关阅读:http://es6.ruanyifeng.com/#docs/let 相关阅读:https://www.cnblogs.com/ksl666/p/5944718.html 相关阅读:htt ...

  3. Nodejs与ES6系列1:变量声明

    1.声明变量 在JS当中一个变量的作用域(scope)是程序中定义这个变量的区域.变量分为两类,全局(global)的和局部的.其中全局变量的作用域是全局性的,即在JavaScript代码中,它处处都 ...

  4. ES6系列之变量声明let const

    ES6也出来好久了,最近闲来无事就想着吧es6做一个系统的总结,巩固自己的知识,丰富一下博客. 为什么叫ES6 实际上是ECMA的一个打的标准,这个标准是在2015年6月发布的,正式的名字实际是es2 ...

  5. js 中的变量声明提前总结

    一.var 声明 ES6之前,js 中声明变量基本上用 var 关键字: 1.如果访问未声明的变量,会报错:ReferenceError 2.声明了未赋值,值为 undefined,跟前面的报错是两回 ...

  6. ES6的强大变量声明

    ES6是javascript的新特性,今天来说说声明变量 过去我们声明变量,都是一个一个声明,现在有了一种新的声明方式,它可以将一个多个变量同时声明,声明后变量同时存在一个集合中,集合的数据类型是对象 ...

  7. Js中有关变量声明和函数声明提升的问题

    在ECMAScript5中没有块级作用域一说,只有函数作用域和全局作用域,在其中声明的变量和函数和其他语言的展现形式不同,在某些情况下不一定需要先定义后使用,函数和变量的使用可以在其声明之前,这到底是 ...

  8. ES6和ES5变量声明的区别(var let const)

    // es5的语法与es6的语法区别 // var let const console.log(name);//undefine,不会报错,因为变量声明会提到作用域的最前面 var name=&quo ...

  9. [JavaScript]JS中的变量声明与有效域

    1.变量声明 var a = 1; //使用var声明变量 b = 1; //不使用var 第一种情况,在当前域中声明一个名为a的变量,如果实在方法内则为局部变量,若在最外层声明则a为全局变量. 第二 ...

随机推荐

  1. MQ 重复消费如何解决?

    1. 使用幂等操作 乐观锁:每个数据有一个版本号,和当前版本号相同的时候进行更新 去重表(缓存): 唯一性索引,如果已经存在值了就不行更新 2. 算法 两个链表是否相交? 3.redis  集合相交的 ...

  2. Jmeter 添加CSV Data set config 文件的相对路径及编码在Windows和Linux下的兼容性(转)

    简介: Jmeter实际上是不需要安装的,只需要有ApacheJMeter.jar.启动批处理文件(jmeter.bat或jmeter).配置文件(jmeter.properties.user.pro ...

  3. 位运算实现四则运算(C++实现)

    前言 Leetcode中有一道这样的题:给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符.返回被除数 dividend 除以除数 di ...

  4. 安装pywin32出现--Python version 3.x required, which was not found in the registry

    这两天安装pywin32时出现了这个问题 双击.exe文件进入安装界面,然后点击下一步,它会自动定位你的python安装在什么地方,但是我的安装过程中未自动定位到python安装位置,并显示显示: 安 ...

  5. jquery——选项卡

    下面是闭包做选项卡: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  6. eclipse自动添加版权信息

    Preference->Java->Code Style->Code Template->comments->Files->Edit 勾选上Automaticall ...

  7. Ubuntu上安装Samba服务器实现家庭共享

    如何在Ubuntu上安装Samba服务器 大多数Linux发行版都包含Samba. 要在Ubuntu上安装Samba,只需运行: sudo apt install samba 要检查您的Samba版本 ...

  8. LVS 集群工作原理

    1. 集群:集群(cluster )就是一组计算机,它们作为一个整体向用户提供一组网络资源,单个计算机系统就是一个集群节点(node). 2. 集群种类: <1>. 负载均衡集群(Load ...

  9. base、self标签

    以新的窗口打开页面 self在自己的窗口打开

  10. vue-elem-stylus 的mixin用法

    .tab border-1px{red} minxin border-1px(&color) position:relative &::after display:block posi ...