js变量的重复声明问题总结
首先说明一下js声明变量的三种方式:var,let,const
let,const
的声明范围是块级作用域,var
的声明范围是函数作用域。
体会以下代码:
if(true){var a=1;let b=2;}console.log(a);//1console.log(b);//报错,Uncaught ReferenceError: b is not defined
let声明的作用域被限制在块级作用域if{}
中。
const和let用法性质基本相同,唯一区别,const声明时必须赋值,且后续不能再改变值。
const a=1;console.log(a);a=2;//报错:Uncaught TypeError: Assignment to constant variable.console.log(a);
const、let和var的区别在于:const、let有块级作用域、不存在变量提升、不属于window的对象、同一作用域内不能重复声明。
1、var重复声明var
(1)var重复声明一个已经var声明的变量是合法的。
(2)var重复声明并赋值一个变量,只是担当一个重新赋值的角色。
(3)如果重复声明但不赋值一个变量,该语句不会对该变量有任何影响。
var a = 100;
function fn() {alert(a); //undefined 变量提升var a = 200;alert(a); //200
}
fn();
alert(a); //100
var a; //情况3
alert(a); //100
var a = 300; //情况2
alert(a); //300
2、let重复声明let变量
同一作用域内,let重复声明let变量时不合法的。
if(true){//不合法let c=1;let c=2;}
3、const重复声明const变量
同一作用域内,const重复声明const变量时不合法的。
if(true){//不合法const c=1;const c=2;}
4、let重复声明var变量
同一作用域内,let重复声明var变量不合法。
if(true){var c=2;let c=1;console.log(c);//报错:Uncaught SyntaxError: Identifier 'c' has already been declared}
5、const重复声明var变量
同一作用域内,const重复声明var变量不合法。
if(true){var c=2;const c=1;console.log(c);//报错:Uncaught SyntaxError: Identifier 'c' has already been declared}
6、let重复声明const变量
同一作用域内,let重复声明const变量不合法。
if(true){const c=2;let c=1;console.log(c);//报错:Uncaught SyntaxError: Identifier 'c' has already been declared}
7、cosnt重复声明let变量
同一作用域内,const重复声明let变量不合法。
if(true){let c=2;const c=1;console.log(c);//报错:Uncaught SyntaxError: Identifier 'c' has already been declared}
8、var重复声明let变量
同一作用域内,var重复声明let变量不合法。
if(true){let c=1;var c=2;console.log(c);//报错:Uncaught SyntaxError: Identifier 'c' has already been declared}
9、var重复声明const变量
同一作用域内,var重复声明const变量不合法。
if(true){const c=1;var c=2;console.log(c);//报错:Uncaught SyntaxError: Identifier 'c' has already been declared}
js变量的重复声明问题总结相关推荐
- JS函数简单的底层原理 -变量重复声明无效,隐式申明,变量提升,函数提升,以及堆栈内存的变化
JS函数简单的底层原理 (个人理解): 1. 已经使用var申明且赋值,若再次申明,则第二次申明(不赋值)无效. 2.在同一个作用域下,只要是发生了同名,且变量完成赋值,后者会覆盖前者.存在两个相同的 ...
- js 变量、函数重复声明和变量提升浅析
第一阶段:看山是山,看水是水 先从简单的例子开始 // 示例1 var a = 1 console.log(a) // 1 var a = 2 console.log(a) // 2 通过两个var声 ...
- Js 变量声明提升和函数声明提升
Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...
- php变量和js变量的区别吗,JS声明变量的3种方式和区别
JavaScript 是弱类型语言,可以不需要声明变量而直接使用.这样虽然简单但不易发现变量名方面的错误,所以不建议这样做.通常的做法是在使用 JavaScript 变量前先声明变量.目前,JavaS ...
- 【JS里面使用var声明变量存在的三个问题】
1.允许重复声明,导致变量被覆盖.看如下代码: var a = 1; function prinf(){console.log(a); }var a = 2;prinf(); 结果输出: 这里假设你v ...
- golang重复声明变量
golang使用简短方式声明变量,左侧必须要有一个新变量,变量也可以重复声明. func main() {test1 := 0test1, test2:= 1, 2 test1:= 3 //错误 } ...
- [新手学go]关于go语言中的变量重复声明
代码一: package mainimport ("fmt" )func main() {a,b :=1,2 a,b := 3,4fmt.Println(a, b) } 代码二: ...
- php声明js变量类型,js中变量是什么以及有哪些类型
在js中,变量是存储信息的容器:JavaScript中有两种类型的变量:局部变量和全局变量. js如何声明变量? 在js中,可以使用关键词"var"或者"let" ...
- js变量以及其作用域详解
2019独角兽企业重金招聘Python工程师标准>>> 一.变量的类型 Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量 ...
最新文章
- ==和equals()的作用及区别
- DB2命令行查看执行计划
- 【Python】青少年蓝桥杯_每日一题_10.03_输出数据
- Windows系统appium移动端自动化真机环境搭建
- 关于Ajax工作原理
- I - Arbitrage(判断是否有无正环 II)
- 怎么打包图片_房产也能批发!澳村庄40栋房打包出售,总价$175万,买了变村长!...
- 银行业务系统数据库设计与实现
- 解决PHP提示Warning: Division by zero in错误
- 这六大方法,如何让 Transformer 轻松应对高难度长文本序列?
- 安装北洋雷达驱动以及可能遇到的问题
- 李沐动手学深度学习_环境搭建
- 签名格式_职场商务电子邮件礼仪
- 数据结构之你没见过的排序算法!
- Springboot web项目简单统计在线人数
- win10计算机右键属性打不开,右键电脑属性打不开|解决win10系统我的电脑属性打不开...
- “对不起,您只能拨打中国移动的号码…”
- dd-wrt 去广告_如何在DD-WRT上使用Pixelserv删除广告
- SCrapy爬虫大战京东商城
- python3+selenium实现自动进熊猫直播间发弹幕的脚本