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

JavaScript的作用域和作用域链

作用域

● 作用域(Scoping):我们程序中变量的组织和访问方式。"变量存在在哪里?“或者"我们可以在哪里访问某个变量,以及在哪里不能访问?”
● 词法作用域(Lexical scoping):作用域由函数和代码块的位置控制。
● 作用域(Scope):变量声明的空间或环境(在函数的情况下是变量环境)。有全局作用域、函数作用域和块作用域:
● 变量的作用域:代码中可以访问某个变量的区域。

三种类型的作用域

全局作用域

const me = "ItShare";
const job = "teacher";
const year = 1999;

● 在任何函数或块之外
● 在全局作用域中表明的变量在任何地方都可以访问

函数作用域

function calcAge(birthYear) {const now = 2037;const age = now - birthYear;return age;
}console.log(now);//ReferenceError

● 变量只能在函数内部使用,不能在函数外部访问
● 也称为局部作用域

块作用域

在这里插入图片描述

● 变量只能在块内访问(块级作用域)
● 然而,这仅适用于使用let和const声明的变量!
● 函数也是块级作用域的(仅在严格模式下)。

作用域案例

const myName = 'Jonas';function first() {const age = 30;if (age >= 30) {// trueconst decade = 3;var millennial = true;}function second() {const job = 'teacher';console.log(`${myName} is a ${age}-old ${job}`);// Jonas is a 30-old teacher}second();
}
first();

在这里插入图片描述

作用域链和调用堆栈的关系

在这里插入图片描述

总结

● 作用域提出这样一个问题:“变量存在于何处?” 或者"我们在哪里可以访问某个变量,在哪里不可以?"
● 在JavaScript中有三种作用域:全局作用域、由函数定义的作用域以及由块定义的方位(ES6开始);
● 只有let和const变量是块作用域的,用var声明的变量在最近的函数作用域中结束;
● 在JavaScript中,我们有词法作用域,所以我们可以访问变量的规则是基于函数和块在代码中的确切位置编写的;
● 每个作用域总是可以访问其外层作用域中的所有变量。这就是作用域链!
● 当一个变量不在当前作用域中时,引擎会沿着作用域链向上查找,直到找到所需的变量。这被称为变量查找;
● 作用域链是单向的:一个作用域永远不会访问内部作用域的变量。
● 在某个作用域中的作用域链等于将所有父作用域的变量环境相加。
● 作用域链与函数调用的顺序无关。它对作用域链没有任何影响!

http://www.lryc.cn/news/218867.html

相关文章:

  • 电脑文件批量重命名攻略:高效操作技巧助您轻松完成任务
  • 四、三种基本程序结构
  • 深入理解元素的高度、行高、行盒和vertical-align
  • 什么叫储能能量管理单元EMU?储能能量管理单元EMU功能?储能EMU是什么?储能能量管理系统如何实现一次调频AGC-AVC功能?
  • 机器学习之决策树
  • 聊聊logback的UNDEFINED_PROPERTY
  • 记一次pdjs时安装glob出现,npm ERR! code ETARGET和npm ERR! code ELIFECYCLE
  • Zabbix如何监控腾讯云NAT网关
  • SpringBoot案例(数据层、业务层、表现层)
  • 交叉编译程序:以 freetype 为例
  • spring-cloud-starter-dubbo不设置心跳间隔导致生产者重启no Provider问题记录
  • 【数据结构】败者树的建树与比较过程
  • GlobalMapper---dem生成均匀分布的网格,或者均匀分布的点高程点
  • k8s系列文章一:安装指南
  • Pod 进阶
  • Proteus仿真--12864LCD显示计算器键盘按键实验(仿真文件+程序)
  • pam_radius库的使用
  • qt6:无法使用setFontColor
  • 竞赛 深度学习疫情社交安全距离检测算法 - python opencv cnn
  • 无声的世界,精神科用药并结合临床的一些分析及笔记(十)
  • 构建强大的Web应用之Django详解
  • Linux 之搭建 arm 的 qemu 模拟器
  • uinapp微信小程序隐私政策授权
  • 使用Java工作流简单介绍
  • 数字媒体技术基础之:ICC 配置文件
  • 解析SD-WAN组网方式及应用场景,全面了解典型案例
  • 中小学智慧校园电子班牌管理系统源码
  • 日常踩坑-[sass]Error: Expected newline
  • UI设计感蓝色商务数据后台网站模板源码
  • 二、计算机组成原理与体系结构