var,let和const的理解

编程入门 行业动态 更新时间:2024-10-28 18:29:29

一、全局作用域与函数作用域

在ES6之前,JS只有两个作用域,全局作用域和函数作用域。那么什么是作用域呢?作用域是指一个变量的作用范围。
全局变量:全局变量在 JavaScript 程序的任何地方都可以访问。
局部变量:函数内使用 var 声明的变量只能在函数内访问,如果不使用 var 则是全局变量。

var a = 10;
function fun(){console.log("第二部分:" + a);
}
console.log("第三部分:" + a);	//10
fun();		//10
function fun(){var a = 10;console.log("第二部分:" + a);
}
fun();		
console.log("第三部分:" + a);	//a is not defined
function fun(){a = 10;console.log("第二部分:" + a);
}
fun();		
console.log("第三部分:" + a);	//10
function fun(){a = 10;console.log("第二部分:" + a);
}
console.log(a);		//a is not defined
fun();		
console.log("第三部分:" + a);

结论:
(1) 在最外面用var声明的变量是全局变量;
(2)在函数内用var声明的变量是局部变量
(3)不用var声明,直接赋值的变量,是全局变量。
注:a = 10,这种声明方式只有在这条语句执行的时候才会创建全局变量a。

二、JavaScript的块级作用域

ECMAScript 6(简称ES6)中新增了块级作用域。
块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。

使用 var 关键字声明的变量不具备块级作用域的特性,它在 {} 外依然能被访问到。
{var a = 10;
}
console.log(a);		//输出10
es5中要实现块级作用域,通常借助立即执行匿名函数来实现
(function(){var a = 10;
}());
console.log(a);		//a is not defined
使用let和const声明的变量形成块作用域,是局部变量
{let a = 10;
}
console.log(a);		//a is not defined
{const b = 10;
}
console.log(b);		//b is not defined
使用let与const在最外层声明的变量有全局作用域
let a = 10;
{console.log(a);		//10
}
const b = 10;
{console.log(b);		//10
}

三、使用var声明变量带来的问题

允许重复的变量声明,导致变量覆盖
var a = 10;
console.log(a);		//10
{console.log(a);		//10var a = 2console.log(a);		//2
}
console.log(a);			//2

使用let则不会

var x = 10;
console.log(x);		// 这里输出 x 为 10
{ let x = 2;console.log(x)		// 这里输出 x 为 2
}
console.log(x);		// 这里输出 x 为 10
使用var声明的全局变量会挂载到全局对象window上
//使用var声明的全局变量
var a = 100;
console.log(a,window.a);	//100  100b = 10;
console.log(b,window.b)		//10,10{//var声明的变量没有块级作用域的概念var c = 20;d = 30
}
console.log(c,window.c);	//20 20
console.log(d,window.d)		//30 30function fun(){//用var声明的函数作用域的变量var e = 50;console.log("haha");
}
console.log(window.fun);	//f fun(){...函数内容}
console.log(e,window.e);				//

四、var,let,const的区别

var声明的变量会挂载在window上,而let和const声明的变量不会

var声明变量存在变量提升,let和const声明的变量不存在变量提升,不能在声明变量前使用变量。

let和const声明的变量形成块作用域

同一作用域下let和const不能声明同名变量,而var可以

var和const声明的变量存在暂时性死区

var a = 100;
if(1){a = 10;//在当前块作用域中存在a使用let/const声明的情况下,给a赋值10时,只会在当前作用域找变量a,// 而这时,还未到声明时候,所以控制台Error:a is not definedlet a = 1;
}

const一旦声明必须赋值,不能使用null占位;声明后不能再修改 ;如果声明的是复合类型数据,可以修改其属性

五、const与let的区别

const声明的常量必须初始化,而let声明的变量不用const 定义常量的值不能通过再赋值修改,也不能再次声明。而 let 定义的变量值可以修改。

更多推荐

var,const

本文发布于:2023-05-26 18:04:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/275001.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:var   const

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!