kying-star的博客

vuePress-theme-reco kying-star的博客    2023
kying-star的博客

Choose mode

  • dark
  • auto
  • light
主页
指北
语言学习
AI
前端
后端
算法
杂项
github

kying-star的博客

7

Article

0

Tag

主页
指北
语言学习
AI
前端
后端
算法
杂项
github
  • js
    • 彻底了解This指针
    • 原型与原型链
    • AJAX
    • 防抖与节流
    • 闭包
    • 懒加载
    • 轮播图
    • js作用域
    • JS高阶函数和运行机制
  • css
  • vue
  • typescript
  • React
  • 前端新技术
  • 正则表达式
  • 浏览器

vuePress-theme-reco kying-star的博客    2023

js作用域

kying-star的博客

# js作用域

# 块级作用域

var定义的变量可以跨块作用域访问到

{
    var a = 1;
    console.log(a); // 1
}
console.log(a); // 1

var定义的变量不能跨函数作用域访问到

(function A() {
    var b = 2;
    console.log(b); // 2
})();//自执行等效于A()
	console.log(b); // 报错

if语句和for语句中用var定义的变量可以在外面访问到

if

if(true) {
    var c = 3;
}
console.log(c); // 3

for

for(var i = 0; i < 4; i++) {
    var d = 5;
};
console.log(i);	// 4   (循环结束i已经是4,所以此处i为4)
console.log(d); // 5

var定义的变量父子作用域可以互相访问,但let、const不能

	{
		var a = 1;
		let b = 2;
		const c = 3;	
		
		{
			console.log(a);		// 1	子作用域可以访问到父作用域的变量
			console.log(b);		// 2	子作用域可以访问到父作用域的变量
			console.log(c);		// 3	子作用域可以访问到父作用域的变量

			var aa = 11;
			let bb = 22;
			const cc = 33;
		}
		
		console.log(aa);	// 11	// 可以跨块访问到子 块作用域 的变量
		// console.log(bb);	// 报错	bb is not defined
		// console.log(cc);	// 报错	cc is not defined
	}

# var let const 的区别

  • var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
  • let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
  • const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。
  • 同一个变量只能使用一种方式声明,不然会报错

var

{
    var a = 1;
    console.log(a); // 1
}
console.log(a); // 1

let

父作用域无法获取子作用域定义的变量

{
    let a = 1;
    console.log(a); // 1
}
console.log(a); // a is not defined

反之可以

    let a = 1;
    {console.log(a);} // 1

const同let

{
    const a = 1;
    console.log(a); // 1
}
console.log(a); // a is not defined
const a = 1;
{console.log(a);} // 1

不同声明符号变量重名也会报错