JavaScript中的let和const
在ES6之前,JavaScript中只有两种作用域:全局作用域和函数内部的局部作用域。ES6中新增了两个重要的关键字,let和const,从而引入了块级作用域。
关键字var
使用var关键字声明的变量不具备块级作用域的特性,即在函数外声明的变量即为全局变量。
var声明的变量可以被重新定义。
var i;
var i; //不报错
使用var声明变量带来的问题
var i = 5;
for (var i = 0; i < 10; i++) {}
console.log(i); //10
for循环里的 i 仍是全局变量里的 i,即使在重新声明了。
关键字let
使用let关键字声明的变量,具备块级作用域。
var i = 5;
for (let i = 0; i < 10; i++){}
console.log(i); //5
let i = 5;
for (let i = 0; i < 10; i++);
console.log(i); //5
在相同的作用域(包括块级作用域)中,不能使用 let 来重置 var 声明的变量
var i;
let i; //SyntaxError: Identifier 'i' has already been declared
在相同的作用域(包括块级作用域)中,不能使用 let 来重置 let 声明的变量
let i;
let i; //SyntaxError: Identifier 'i' has already been declared
在相同的作用域(包括块级作用域)中,不能使用 var 来重置 let 声明的变量
let i;
var i; //SyntaxError: Identifier 'i' has already been declared
let 声明的变量必须先声明再使用
关键字const
const关键字也是用于声明一个或多个“常量”,在声明的同时必须进行初始化,并且初始化之后就不能再修改。
这里要注意以下,使用const声明的初始值不能修改,是指变量与值的引用关系不能改变,也就是说如果你改变“值”,但能保证变量与它引用关系不变,其实是合法的。例如:
const myObject = {
name: "Mr hu",
age: 20
}
myObject.age = 21; //虽然修改了值,但引用关系不变,所以不报错
const myObject = {
name: "Mr hu",
age: 20
}
myObject = {
name: "Mr hu",
age: 21
} //企图改变引用关系,报错
当值为数组时,道理也一样。
const和let有很多共同之处
变量都具备块级作用域。
在相同的作用域(包括块级作用域)中,不能使用 const 来重置 var 和 let 声明的变量。
在相同的作用域(包括块级作用域)中,不能使用 const 来重置 const 声明的变量。
都必须先声明再使用。
JavaScript中的let和const的更多相关文章
- javascript中的var,let,const关键字
文章:JavaScript 中 var 和 let 和 const 关键字的区别 比较全面的文章.
- JavaScript中const、var和let区别浅析
在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始 ...
- JavaScript中var、let和const的区别(转载)
一.前言 在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,声明的方式有 var . let . c ...
- javascript中var、let和const的区别
在javascript中,var.let和const都可以用来声明变量,那么三者有什么区别呢?要回答这个问题,我们可以从先想想:三种不同的声明会影响变量的哪些方面?这些方面也就是变量的特性,那么变量有 ...
- javascript中var let const三种变量声明方式
javascript中var let const三种变量声明方式 1.var ①var表示声明了一个变量,并且可以同时初始化该变量. ②使用var语句声明的变量的作用域是当前执行位置的上下文:一个函 ...
- javascript中var、let、const的区别
这几天修改别人的js,发现声明变量有的用var,有的用let,那它们有什么区别呢? javascript中声明变量的方式有:var.let.const 1.var (1)作用域: 整个函数范围内,或者 ...
- javascript中的操作符详解1
好久没有写点什么了,根据博主的技术,仍然写一点javascript新手入门文章,接下来我们一起来探讨javascript的操作符. 一.前言 javascript中有许多操作符,但是许多初学者并不理解 ...
- 深入了解 JavaScript 中的 for 循环
在ECMAScript5(简称 ES5)中,有三种 for 循环,分别是: 简单for循环 for-in forEach 在2015年6月份发布的ECMAScript6(简称 ES6)中,新增了一种循 ...
- ES6中的var let const应如何选择
javascript世界里面的每个人都在说有关ECMAScript 6 (ES6,也称作ES 2015)的话题,对象的巨大变化 ( 类 , super() , 等), 函数 (默认参数等), 以及模块 ...
随机推荐
- Hexo博客主题优化
Hexo博客主题优化 添加背景图 在 themes/*/source/css/_custom/custom.styl 中添加如下代码: body{ background:url(/images/bg. ...
- 《http权威指南》读书笔记9
概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...
- 再谈spring的循环依赖是怎么造成的?
老生常谈,循环依赖!顾名思义嘛,就是你依赖我,我依赖你,然后就造成了循环依赖了!由于A中注入B,B中注入A导致的吗? 看起来没毛病,然而,却没有说清楚问题!甚至会让你觉得你是不清楚spring的循环依 ...
- ueditor后台配置项返回格式出错,上传功能将不能正常使用
和https://ask.csdn.net/questions/382087问题一样. java+jsp1.config.json配置不对2.百度依赖的jar包没引入3.请求controller.js ...
- Python You-Get (送你一个免广告的视频和音乐网站 VIP)
You-get可以在仅仅提供URL情况下就可以实现下载视频.图片.音乐等信息.也可以通过播放器在线观看视频或听音乐,重要的是再也不用烦恼弹出的广告了,如果你想观看视频,但又不想观看广告,并且你还想把视 ...
- mongo in和not in查询
执行语句 db.getCollection("A表").find( { id:{ $in:[1,2]} } ) 作用:查询A表中id字段等于1和等于2 的记录 改成 id:{ $ ...
- Oracle nal() 和count(*)的注意点
select count(*) into fhave from tab_ppxuser where name = userstr;和select nvl(hphotourl, '0') into ph ...
- mysql 架构篇系列 1 复制原理和复制架构
一. 复制概述 mysql 从3.23版本开始提供复制功能,复制是指将主数据库的ddl和dml操作通过二进制日志传到复制服务器(也叫从服务器)上,然后在从服务器上对这些日志重新执行(也叫重做),从而使 ...
- sql server 备份与恢复系列四 大容量模式下的备份与还原
一. 概述 在sql server 备份与恢复系列的第一篇里,有讲到大容量模式下备份与还原的相关知识.这篇重点来演示在大容量模式下常用的备份与还原模式“完整备份+差异备份+日志备份”. 在大容量恢复模 ...
- Unicode 是不是只有两个字节,为什么能表示超过 65536 个字符
Unicode 目前规划的总空间是17个平面(平面0至16),0x0000 至 0x10FFFF.每个平面有 65536 个码点.你只是大致知道平面0(「Basic Multilingual Pl ...