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() , 等), 函数 (默认参数等), 以及模块 ...
随机推荐
- 神经网络(BP)算法Python实现及简单应用
首先用Python实现简单地神经网络算法: import numpy as np # 定义tanh函数 def tanh(x): return np.tanh(x) # tanh函数的导数 def t ...
- 机器学习入门08 - 表示法 (Representation)
原文链接:https://developers.google.com/machine-learning/crash-course/representation/ 机器学习模型不能直接看到.听到或感知输 ...
- 在 React、Vue项目中使用 SVG
在一些现代的扁平化设计网站,特别是移动端网站,经常会包含许多简单而清晰的小图标,例如网站图标.用户的默认头像.移动端网页首页底部固定的切换栏等,这些小图标一般都是由美工做好,可能会放到精灵图上,前端再 ...
- Docker简介以及操作
Docker 简介 Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linu ...
- parseInt和map方法使用案例分析
["1","2","3"].map(parseInt) //[1,NaN,NaN] 先看map()方法 定义和用法 map() 方法返回一个 ...
- java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- Code Complete-13/7/23
What is "construction"? Hava u ever used construction paper to make some things?What i ...
- java.sql.SQLException: The SQL statement must not be null or empty.这个错误
今天发现了这个错误 java.sql.SQLException: The SQL statement must not be null or empty. 并且看了些网页:综合说下这个错误. 一般都是 ...
- [NewLife.XCode]事务处理(算准你的每一分钱)
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...
- 一套能体现 RBAC 的表结构设计
1.RBAC 概述 2.表结构设计 2.1.用户表 2.2.角色表 2.3.权限表 2.4.用户角色(关系)表 2.5.角色权限(关系)表 3.总结 1.RBAC 概述 RBAC(Role-Based ...