首页
编程随笔
Java笔记
Html/Css/Js
Android
后端笔记
服务器搭建
BUG收集
Java异常
Android异常
在线工具
Json格式化
编码/解码
Epub在线编辑
登录
发布文章
个人文章
退出登录
首页
技术教程
BUG收集
在线工具
资源下载
登录
发布文章
退出登录
搜索
当前位置:
首页
-
博客
- 正文
关闭
js中var和let区别
更新时间:2021-03-17 23:09:26
阅读数:724
发布者:落幕
var和let都是用来声明变量,ES6之前只能用var声明变量,ES6出了let来声明变量。 ###不同点: ####1、作用域不同 #####var作用域 示例 1.1: ```javacript function test() { console.log(b); // undefined { var b = 2; } console.log(b); // 2 } test(); console.log(b); // Uncaught ReferenceError: a is not defined ``` 从中可以看出,var定义的变量b的作用域为函数级别(函数内有效),不存在代码块域,变量的定义也提升至了顶部,相当于示例1.1 等价如下: ```javacript function test() { var b; console.log(b); // undefined { b = 2; } console.log(b); // 2 } test(); console.log(b); // Uncaught ReferenceError: a is not defined ``` #####let作用域 示例 1.2: ```javacript function test() { console.log(b); // Uncaught ReferenceError: b is not defined,注释掉继续执行 { let b = 2; console.log(b); // 2 } console.log(b); // Uncaught ReferenceError: b is not defined } test(); console.log(b); // Uncaught ReferenceError: a is not defined ``` 从中可以看出,let的作用域是不会提升,let定义的变量有块级作用域 ####总结: var只有全局作用域和函数作用域,没有块级作用域 let有全局作用域和函数作用域和块级作用域 ####2、var和let重复声明不同 #####var声明变量 ```javacript var a = 1; console.log(a); // 1 var a = 2; console.log(a); // 2 ``` var声明变量是允许重复的,而且是后置替换关系。 #####let声明变量 ```javacript var a = 1; console.log(a); // Uncaught SyntaxError: Identifier 'a' has already been declared var a = 2; console.log(a); ``` let声明多个变量时会直接致使程序异常,所以let不支持多个变量声明