作用域的简介

文章详细介绍了JavaScript中的作用域类型,包括全局作用域、局部作用域和块级作用域,强调了变量的访问规则以及作用域链的概念。通过示例代码解释了不同作用域下变量的生命周期和可访问性,帮助理解作用域对代码的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、作用域的含义

指一个变量的作用范围。

二、作用域的分类

1.全局作用域(global scope)

直接编写在 script 标签中的 js 代码,都会在全局作用域中。全局作用域会在页面打开时创建,在页面关闭时销毁。

let a = 18;
function fun() {
   let a = 20;
}
fun();
console.log(a); // 输出 18
注意:全局作用域的变量都是全局变量,在页面中的任意地方都可以访问和修改。

2.局部作用域(local scope)

局部作用域也称为函数作用域。调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁。

每调用一次函数就会创建一个新的函数作用域,它们之间是相互独立的。在函数作用域中可以访问到全局作用域中的变量;在全局作用域中无法访问到函数作用域的变量。

当在函数作用域中操作一个变量时,它会先在自身的作用域中去找,若有则直接使用;若没有则向上一级作用域中寻找。直接找到全局作用域,若全局作用域仍未找到,则直接报错:Reference Error

    注意:局部作用域的变量时局部变量,只能在变量所在的局部作用域中进行访问和修改。
// 情况1:当在函数作用域中操作一个变量时,它会先在自身的作用域中去找,若有则直接使用; 
let a = 18; 
function fun() {
 let a = 20; console.log(a);
 } 
fun(); // 输出 20
//情况2: 直接找到全局作用域 
let a = 18; 
function fun() {
 console.log(a); 
} 
fun(); // 输出 18
// 情况3:若全局作用域仍未找到,则直接报错:Reference Error
function fun() {
 console.log(a); 
} 
fun(); // 报错 Uncaught ReferenceError: a is not defined
注意1: 在函数内部没有声明直接赋值的变量也属于全局变量。但是不推荐这种方式声明全局变量
let a = 18; 
function fun() {
 b = 20; 
} 
fun(); 
console.log(b); // 输出为 20
注意2:函数内部的形参可以看做是局部变量。
function fun(a) {
 a = 18; // 相当于let a = 18; 
 console.log(a); 
} 
fun(); // 输出18

3.块级作用域(block scope)

在 {} 之间定义的 js 代码是块级作用域。

注意:在块级作用域里定义的变量是块级变量,只在该块级作用域中有效。
// 求0-10的和
let sum = 0; 
for (let i = 1; i <= 10; i ++) { // i 是块级变量
	sum += i;
}
document.write(sum);

三、题目及总结

1.题目

function fun1() {
 let num = 123; 
 function fun2() {
   let num = 0;
   console.log(num); 
  } 
 fun2(); 
} 
let num = 456; 
fun1(); // 输出 0
let a = 1;
function fun1() {
 let a = 2; 
 let b = '22'; 
 fun2(); 
 function fun2() {
  let a = 3; 
  fun3(); 
  function fun3() { 
   let a = 4;
   console.log(a); // 输出 4 
   console.log(b); // 输出 22 
  }
 } 
} 
fun1();

2.题目总结

变量访问原则——作用域链。

只要是代码,就至少有一个作用域。

写在函数内部的局部作用域。

如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。

根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访 问,就称作作用域链。

作用域链:采取就近原则的方式来查找变量最终的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值