IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> javascript中var变量的优缺点 -> 正文阅读

[JavaScript知识库]javascript中var变量的优缺点

var变量的优缺点

var变量在我们学习JavaScript时,是最常用的变量,但是在我们做大型项目的时候,会发现有很多不可避免的问题,所以在这里我简单说一下关于var变量声明时存在的几个问题:

1、允许重复变量的声明,导致数据被覆盖

通俗的讲,就是在编译,我们运用var生成一个变量,正常情况下,这个变量是不会再被生成的,但是var还可以允许生成并且不会报错,而且里面的数据是会覆盖前面的数据,这个问题是很头疼的,比如你写了1000行代码,但是最后运行的数据出错了,你就要检查代码,你会很难发现问题在哪里。下面我们举一个例子:

 var a = 1 ;
function print() {
console.log(a);
}
//假如有1000行代码
var a =2;
print();

2、变量提升

首先解释一下什么是变量提升,在这里你要明白什么是全局变量和局部变量,你了解之后就很简单了,在这里就是局部变量提升到全局变量,举一个例子就明白了:

if(Math.random() < 0.5 ){
var a = "123";
console.log(a);//①
}else{
console.log(a);
}
console.log(a);//②
//在这里我们随机生成一个数,如果这个数小于0.5,那么我们就声明变量a,并且赋值为123,如果随机数大于0.5,则输出a;
//变量提升:我们在if语句中生成的变量a,但是他会从if语句中提升到全局变量中,我们理解的是他只能在if语句中使用,但是②中也会输出123,就是因为他跑到了全局变量中

(1)变量提升会造成该以数据的访问,说白了就是你不知在哪里就会冒出个数据,而且这个数据只在局部变量中。
(2)闭包问题

3、局部变量挂载到全局对象,造成全局对象的污染

var abc  = '2';
console.log(window.abc);
//正常情况下,全局变量是没有abc这个变量的,但是结果会输出2,这就是因为局部变量挂载到全局对象,造成了全局的污染

对于这个问题,我们如果生成全局中有的变量,就会覆盖全局变量中的问题,会导致很多奇奇怪怪的问题。

怎么解决以上问题

很简单,我们只需要把var换成let来生成就可以了
1、let不允许当前作用域下重复声明(不同作用域下可以重复声明),比如

let a = 2 ; 
let a = 3;
//会报错,并且报错第二句话,检查到当前作用域(全局作用域)已声明了变量a

2、不会污染全局变量,就是不会变量提升

let a = 123;
console.log(window.a);
//会输出undefined,

但是实际上,在底层实现的时候let也会有变量提升,只不过是提升后放入了“暂时性死区”,在这里面我们无法访问,但是报错会报“ Cannot access ‘a’ before initialization”。当代码运行到该变量声明语句时,会将其从“暂时性死区”移除。

注意:在循环中,用let声明的循环变量,会特殊处理,每次进入循环体,都会开启一个新的作用域 ,并将其循环变量绑定到该作用域(每次循环使用 一个新的作用域) ,循环过程中可以使用,循环过后会销毁。

当然在这里const也可以,const是用来声明常量的,从const和let完全相同,但是用const时,必须在声明时赋值并且不可以重复赋值,一般用于设定固定数值。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 11:46:11  更:2021-08-27 11:46:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:08:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码