JS - 自由变量与作用域链

article/2025/10/13 11:41:27

先解释一下什么是“自由变量”。

在A作用域中使用的变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,x就是一个自由变量。如下图

如上程序中,在调用fn()函数时,函数体中第6行。取b的值就直接可以在fn作用域中取,因为b就是在这里定义的。而取x的值时,就需要到另一个作用域中取。到哪个作用域中取呢?

有人说过要到父作用域中取,其实有时候这种解释会产生歧义。例如:

 

所以,不要在用以上说法了。相比而言,用这句话描述会更加贴切——要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”,切记切记——其实这就是所谓的“静态作用域”。

对于本文第一段代码,在fn函数中,取自由变量x的值时,要到哪个作用域中取?——要到创建fn函数的那个作用域中取——无论fn函数将在哪里调用。

 

上面描述的只是跨一步作用域去寻找。

如果跨了一步,还没找到呢?——接着跨!——一直跨到全局作用域为止。要是在全局作用域中都没有找到,那就是真的没有了。

这个一步一步“跨”的路线,我们称之为——作用域链

我们拿文字总结一下取自由变量时的这个“作用域链”过程:(假设a是自由量)

第一步,现在当前作用域查找a,如果有则获取并结束。如果没有则继续;

第二步,如果当前作用域是全局作用域,则证明a未定义,结束;否则继续;

第三步,(不是全局作用域,那就是函数作用域)将创建该函数的作用域作为当前作用域;

第四步,跳转到第一步。

 


x() ==30;

以上代码中:第13行,fn()返回的是bar函数,赋值给x。执行x(),即执行bar函数代码。取b的值时,直接在fn作用域取出。取a的值时,试图在fn作用域取,但是取不到,只能转向创建fn的那个作用域中去查找,结果找到了。

 

接下来咱们开始正式说说一直期待依旧的朋友——闭包。敬请期待下一节。


--------------------------------------------------------------------------


http://chatgpt.dhexx.cn/article/dqtWFxl5.shtml

相关文章

2. 自由度

目录 1. 自由度的定义 2. 自由度的计算 2.1 刚体的自由度 2.2 运动副 2.3 自由度算例 2.4 自由度计算公式 3. 总结 1. 自由度的定义 自由度在很多领域中会出现,对于机器人而言,我们这里谈的也就是机构的自由度。任何一台机器人都可以认为是一个机…

自由度

刚体的自由度 自由度指物体能够对坐标系进行独立运动的数目,物体所能进行的运动如下图: 一个物体可以相对于坐标系,进行三个平移和三个旋转运动,即一个简单的物体有六个自由度。 2 运动副与关节 运动副是两构件直接接触并能产…

约束度与自由度

约束度与自由度 无论是在机械原理与机械设计课程,还是在理论力学课程中,我们都会遇到约束度与自由度,但我未曾想在宇哥的线性代数课上也能听到这两个熟悉的名词。在线性代数第四讲线性方程组课程中,宇哥在讲到齐次线性方程组的有解…

这是你希望的自由职业么

每到周末文章的打开率和阅读量就变得惨淡的不行,索性就不分享干货,闲聊一下九月份私活结束后的自由职业经历。看看这是否是你向往的自由职业生活状态么? 九月份,忙完了手头的项目,也没心思找工作,一心想着借…

计算机屏幕截图按什么键,电脑按什么键自由截图

在我们工作生活中经常需要用到电脑截图来截取保存些重要信息,不过对于电脑新手来说还是不太清楚电脑怎么截图,问小编电脑按什么键自由截图。那今天小编就给大家介绍一个电脑截图的快捷方式,希望能帮到大家。 台式电脑使用快捷键进行截图&…

什么是机器人的自由度

自由度是机器人的一个重要技术指标,它是由机器人的结构决定的,并直接影响到机器人的机动性。 1. 刚体的自由度 物体上任何一点都与坐标轴的正交集合有关。物体能够对坐标系进行独立运动的数目称为自由度(DOF,degree of freedom)。…

讲讲什么是自由度

总第223篇/张俊红 我们在前面的方差分析中有提过一个概念就是自由度,在前面文章中给了一个计算就是自由度样本数-1。这一篇就来具体聊聊什么是自由度。 先来看看百度百科的解释: 自由度(degree of freedom, df)指的是计算某一统计量时,取值不…

什么是自由软件?

关注星标公众号,不错过精彩内容 来源 | www.gnu.org 编排 | strongerHuang 可能你认为免费软件,就是自由软件,那么你肯定错了,下面来听听专家怎么描述自由软件的。 strongerHuang 1 自由软件定义 开源(Open source&…

解构“自由”

“知乎”上有一个高票答案,研究了“什么样的人最自由”这个问题,作者“清流”说1: 我以前跟我的第一任老板讨论过一个问题:人类想要自由还是不想?结论是,绝大多数人本质上是不想要自由的,他们想…

Kettle工具入门

Kettle工具入门 Kettle工具入门 Kettle是什么?为什么要用Kettle?怎么用Kettle? 下载运行简单应用 表到表转换json到表的操作参考 Kettle是什么? Kettle是水壶。 “多喝热水”是我们对女朋友美好的祝福。因为未经处理的生水&#…

kettle安装及使用

文章目录 1、kettle简述1.1、kettle是什么 2、kettle安装配置2.1、先决条件2.1.1、安装jdk8 2.2、kettle下载2.3、打开kettle 3、kettle基本概念3.1、转换和作业3.2、运行工具3.2.1、SPOON3.2.2、KITCHEN和PAN3.2.3、Carte kettle基本使用及常见问题 1、kettle简述 1.1、kettl…

Kettle的下载安装教程和使用简介(内含第一个kettle转换案例)

本文首先介绍Kettle工具的安装及基本概念,然后通过一个案例实操介绍Kettle工具的使用。 本文重要的内容如下: Kettle的安装 1.Java的安装 登录Java的官网后,进入到下载页面:http://www.oracle.com/technetwork/java/javase/downl…

kettle Hello World教程

kettle Hello World教程 1、HelloWorld 示例 通过这个例子,介绍kettle的一些基础知识及应用: n 使用Spoon工具 n 转换的创建 n 步骤及连线 n 预定义变量 n 在Spoon中预览和执行 n 使用pan工具在终端窗口执行转换 概述 我们要实现的目标是…

kettle入门

目录 前言 一、kettle是什么 二、kettle 安装与基本使用 2.1 kettle 安装 2.2 kettle的基础使用 2.21 做一个简单的转换样例 2.2.2 小技巧 三、转换常用组件使用 3.1 输入模块 3.1.1 生成记录 3.1.2 表输入 3.2 输出模块 3.2.1表输出 3.3.2 插入/更新 3.3.3 更新 …

最新版kettle安装教程!!!

终于又想起来要把ketlle装好了,原先我是在虚拟机用的kettle,可是切换还是太麻烦了,今天想说装一个mac版的。进到官网发现它已经换地址了。。。 好巧不巧,刚好是6月5号换的。sad。 1、下载kettle 其实kettle的下载文件是mac和wi…

Kettle使用教程(一)

Kettle自己有三个主要组件:Spoon,Kitchen,Pan。其中Spoon是一个图形化的界面,用于windows的时候,先设置环境变量:pentaho_java_home,例如:C:\Program Files\Java\jdk1.7.0_25&…

Kettle — 安装和部署

前提 Kettle是纯Java编写的ETL开源工具,目前Kettle7和Kettle8都需要Java8或者以上才能正常运行。所以开运行Kettle前先检查Java环境是否正确配置,Java版本是否是8或者以上。 Kettle安装 1)创建Kettle的目录,并将Kettle的zip包解…

kettle实战教程-纯实战开发

kettle实战教程-纯实战开发 欢迎关注笔者的公众号: java大师, 每日推送java、kettle运维等领域干货文章,关注即免费无套路附送 100G 海量学习、面试资源哟!!个人网站: http://www.javaman.cn/kettle/kettle-actual Kettle简介:Ket…

Kettle安装及配置

安装环境说明 jdk 采用 jdk-8u102-windows-x64 kettle采用kettle 8.2 文末,博主会将kettle下载地址附上,还包含其他版本(作为本专栏开博小福利)。kettle9.0版本以下,本教程都适用,kettle9.0及更新的其他版本…

Kettle的安装和使用

Kettle简介 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。 Kettle是“Kettle E.T.T.L. Envirnonment“只取首字母的缩写,这意味着它被设计用来帮助你实现你的 ETTL 需要&#…