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. CentOS 安装最新的 RabbitMQ 3.7.8

    RabbitMQ依赖Erlang,Erlang又依赖很多包,安装非常麻烦,可以如下操作: RabbitMQ在github上有提供新的erlang包(https://github.com/rabbitm ...

  2. jquery——幻灯片(只动一屏)

    制作天天生鲜的幻灯片部分 贴了全部代码: main.html: <!DOCTYPE html> <html lang="en"> <head> ...

  3. Vue源码学习之双向绑定

    首发地址:CJWbiu's Blog 原理: ‘当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.definePr ...

  4. Java集合——集合框架Iterator接口

    1.集合输出 很多情况下我们需要把集合的内容进行输出,也就是遍历集合. 遍历集合的方式有以下几种: 1.Iterator 2.ListIterator 3.Enumeration(枚举方式,比较老一般 ...

  5. Kotlin容器

    1. 容器 可变/不可变 List<out T> 只读list; MutableList<T>; Set<out T>/MutableSet<T> Ma ...

  6. drupal优化全攻略

    下面是drupal优化的一些经验.分四大部分来讲. 第一部分:Drupal系统本身的设置来达到优化 第二部分:针对php代码进行的优化 第三部分:针对MYSQL数据库进行的优化 第四部分:针对网站架构 ...

  7. using System.Web.Script.Serialization

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...

  8. vue 导出excel

    1.安装三个依赖包 npm install -S file-saver npm install -S xlsx npm install -D script-loader 2.在项目中创建一个文件夹(比 ...

  9. 在Magento中用MySQL模拟队列发送电子邮件

    1. 需求 顾客在网站上购买特定商品并且这些商品的总金额超过特定金额后,使用email给顾客发送一个优惠券:假如某件商品已经降价了,则此商品的金额不计算在目标总金额内: 2. 需求分析 ①发送优惠券的 ...

  10. 学习笔记:MDN的JavaScript

    JavaScript 第一步 什么是JavaScript? 每次当你浏览网页时不只是显示静态信息—— 显示即时更新的内容, 或者交互式的地图,或 2D/3D 图形动画,又或者自动播放视频等,你可以确信 ...