当前位置: 首页 > news >正文

作用域与作用域链

1.什么是作用域

作用域是指当前执行代码对变量的访问权限,也就是这个变量可以在代码中使用的范围

2.作用域分类

全局作用域:

任何地方都能访问到的对象拥有全局作用域,比如在全局上下文中定义的变量和函数。

var globalVar = 'I am global';function globalFunction() {console.log(globalVar);
}globalFunction(); // 输出:I am global

局部作用域:

函数内部的就是局部作用域,又叫做函数作用域。比如当变量在函数内部使用 var 声明时,该变量只能在该函数内部访问,函数外部无法访问。

function myFunction() {var localVar = 'I am local';console.log(localVar); // 输出:I am local
}myFunction();
console.log(localVar); // ReferenceError: localVar is not defined

块级作用域:

使用 let 和 const 定义的变量在其所在的代码块(如 if 语句、循环等)内可用。

if (true) {let blockScopedVar = 'I am block scoped';console.log(blockScopedVar); // 输出:I am block scoped
}console.log(blockScopedVar); // ReferenceError: blockScopedVar is not defined

3.全局变量和局部变量

局部变量:只能在函数中访问,该函数外不可访问

全局变量:

  • 函数外定义的变量
  • 所有未定义直接赋值的变量自动声明为拥有全局作用域

4.作用域链

作用域链是一个在多层嵌套函数中查找变量的过程

当在某个作用域中查找变量时,JavaScript 会首先在当前作用域中查找,如果未找到,会向上查找其父作用域,直到找到变量或者到达全局作用域为止。

作用域链的工作范围

  1. 当前作用域: 首先在当前函数或代码块的作用域中查找变量。
  2. 外部作用域: 如果在当前作用域中未找到,JavaScript 会查找该作用域的外部作用域,继续向上查找,直到找到变量或达到全局作用域。
  3. 全局作用域: 如果仍未找到,则返回 undefined 或抛出错误。
var globalVar = 'I am global';function outerFunction() {var outerVar = 'I am outer';function innerFunction() {var innerVar = 'I am inner';console.log(innerVar);  // 输出:I am innerconsole.log(outerVar);  // 输出:I am outerconsole.log(globalVar); // 输出:I am global}innerFunction();
}outerFunction();


http://www.mrgr.cn/news/33691.html

相关文章:

  • 智慧医疗:纹理特征VS卷积特征
  • 创新体验触手可及 紫光展锐携手影目科技推出AI眼镜开放平台
  • 一七五、HTML 不同类型的事件及其说明和示例
  • GPU性能测试,环境搭建笔记,transformers/huggingface_hub改国内源,BertLayer import 报错
  • 基于Python的药房管理系统
  • 工程师 - etc/hosts文件
  • fas sklxj siaoj oisaj
  • 【系统架构设计师】论文模板:快速写好一篇架构设计师论文
  • Rabbitmq消息队列,安装,使用,三种工作模式
  • Vue工程师面试题
  • re题(39)BUUCTF-[FlareOn3]Challenge1
  • DNF Decouple and Feedback Network for Seeing in the Dark
  • 【LLM论文日更】| 俄罗斯套娃嵌入模型
  • 中国人工智能企业崛起:4000家背后的机遇与挑战
  • 感知算法引入时序模型的优势
  • 企业级-pdf预览-前后端
  • 4--SpringBoot项目中分类管理
  • 【小bug】使用 RestTemplate 工具从 JSON 数据反序列化为 Java 对象时报类型转换异常
  • python编程,把所有子目录和文件输出到文本文件
  • C++面向对象:多态!
  • ComfyUI生成头像
  • spring揭秘22-springmvc01-概述
  • 基于51单片机的手环设计仿真
  • 数据结构与算法——Java实现 10.习题——删除有序链表重复节点
  • Java编程规范
  • Python知识点:如何使用Python进行智能合约开发(Solidity、Web3.py)