JS块级作用域以及var、let、const三者区别

1、关于js没有块级作用域

JavaScript是由ECMAScript、DOM、BOM三部分组成。
JavaScript中作用域有:全局作用域、函数作用域。es6之前没有块级作用域。
ES6中新增了块级作用域。块作用域由 { } 包括,比如 if语句和for语句里面的{ }。

2、var、let、const区别

var

  • var定义的变量可以跨块作用域访问到
	{
		var a = 1;
		console.log(a); //1
	};
	console.log(a);//1
  • var定义的变量不能跨函数作用域访问到
(function B() {
		var b = 2;
		console.log(b);//2
	})();
console.log(b);// 报错

let

  • let定义的变量,只能在块作用域里面访问
	{
		let c = 3;
		{
			console.log(c);//3  子作用域可以访问到父作用域的变量
		}
	}
  • let定义的变量不能跨块作用域访问到
	{
		let d = 1;
		console.log(d);//1 
	};
	console.log(d);//  报错
  • let定义的变量不能跨函数作用域访问到
(function E() {
		let e = 2;
		console.log(e);//2
	})();
console.log(e);// 报错

const

  • const用来定义常量,使用时必须必须赋值,不能初始化。
{
		const f ;
		console.log(f); // 报错
};
  • 只能在块作用域里访问,而且不能修改。不能跨块
{
		const g = 1;		
		console.log(g);// 1
		g=2;
		console.log(g);// 报错
};
console.log(g);// 报错 不能跨块

3、什么是变量提升

  • 变量提升-----就是把变量声明提升到作用域的最顶端上去,仅提升声明,不提升初始化(赋值语句)。函数提升也是只提升函数声明,不提升初始化。
  • 同一个变量只会声明一次,其他的会被忽略掉。
  • 函数声明优先级>变量声明优先级。
  • var有变量提升,let没有变量提升。

例1
在这里插入图片描述
在这里插入图片描述
例2

console.log(b);//undefined
var b=3;

相当于:

var b
console.log(b);//undefined
b=3;

例3

c=4;
		var c;
		console.log(c)//4

例4(函数提升)

fn2("tom");
		function fn2(name) {
			console.log("my name is:" + name);//my name is:tom
		}
原创文章 3 获赞 14 访问量 2333

猜你喜欢

转载自blog.csdn.net/weixin_46765630/article/details/106101364