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为全局变量. 第二 ...
随机推荐
- CentOS 安装最新的 RabbitMQ 3.7.8
RabbitMQ依赖Erlang,Erlang又依赖很多包,安装非常麻烦,可以如下操作: RabbitMQ在github上有提供新的erlang包(https://github.com/rabbitm ...
- jquery——幻灯片(只动一屏)
制作天天生鲜的幻灯片部分 贴了全部代码: main.html: <!DOCTYPE html> <html lang="en"> <head> ...
- Vue源码学习之双向绑定
首发地址:CJWbiu's Blog 原理: ‘当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.definePr ...
- Java集合——集合框架Iterator接口
1.集合输出 很多情况下我们需要把集合的内容进行输出,也就是遍历集合. 遍历集合的方式有以下几种: 1.Iterator 2.ListIterator 3.Enumeration(枚举方式,比较老一般 ...
- Kotlin容器
1. 容器 可变/不可变 List<out T> 只读list; MutableList<T>; Set<out T>/MutableSet<T> Ma ...
- drupal优化全攻略
下面是drupal优化的一些经验.分四大部分来讲. 第一部分:Drupal系统本身的设置来达到优化 第二部分:针对php代码进行的优化 第三部分:针对MYSQL数据库进行的优化 第四部分:针对网站架构 ...
- using System.Web.Script.Serialization
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...
- vue 导出excel
1.安装三个依赖包 npm install -S file-saver npm install -S xlsx npm install -D script-loader 2.在项目中创建一个文件夹(比 ...
- 在Magento中用MySQL模拟队列发送电子邮件
1. 需求 顾客在网站上购买特定商品并且这些商品的总金额超过特定金额后,使用email给顾客发送一个优惠券:假如某件商品已经降价了,则此商品的金额不计算在目标总金额内: 2. 需求分析 ①发送优惠券的 ...
- 学习笔记:MDN的JavaScript
JavaScript 第一步 什么是JavaScript? 每次当你浏览网页时不只是显示静态信息—— 显示即时更新的内容, 或者交互式的地图,或 2D/3D 图形动画,又或者自动播放视频等,你可以确信 ...