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

JavaScript作用域与作用域链

JavaScript作用域与作用域链

JavaScript的作用域和作用域链是理解这门语言的关键概念之一。作用域指的是变量和函数在程序中可被访问的范围。作用域链是由函数的嵌套关系决定的变量对象的链式结构。

静态作用域与动态作用域

JavaScript使用静态作用域,也称为词法作用域。静态作用域在函数定义时就已经确定了作用域链,基于函数嵌套关系。变量的查找是按定义时的作用域链顺序进行的。

// 静态作用域示例
var outerVar = 'Outer Variable';function outerFunction() {var innerVar = 'Inner Variable';function innerFunction() {console.log(innerVar); // Inner Variableconsole.log(outerVar); // Outer Variable}innerFunction();
}outerFunction();

相对应的,动态作用域是在函数调用时确定的作用域,基于函数的调用堆栈。JavaScript本身不直接支持动态作用域,但可以通过使用this关键字来模拟类似的行为。

// 动态作用域示例
var outerVar = 'Outer Variable';function outerFunction() {var innerVar = 'Inner Variable';function innerFunction() {console.log(this.innerVar); // undefinedconsole.log(this.outerVar); // Outer Variable}innerFunction.call(this);
}outerFunction();

作用域链的概念

作用域链是由函数的嵌套关系决定的变量对象的链式结构。当在函数中访问一个变量或调用一个函数时,JavaScript引擎首先搜索当前作用域的变量对象,如果没有找到,则沿着作用域链向上搜索,直到找到该变量或函数或达到全局作用域。

// 作用域链示例
var globalVar = 'Global Variable';function outerFunction() {var outerVar = 'Outer Variable';function innerFunction() {console.log(outerVar); // Outer Variableconsole.log(globalVar); // Global Variable}innerFunction();
}outerFunction();

内存管理与作用域

理解JavaScript的作用域对于内存管理也很重要。在函数执行完毕后,其变量对象及其作用域链会被销毁,释放内存。但闭包的存在可以延长函数内部变量的生命周期。闭包是指一个函数可以访问其创建时所处的上下文中的变量,即使在函数执行完毕后,被闭包引用的变量仍然存在于内存中。

// 闭包示例
function createCounter() {var count = 0;function increment() {count++;console.log(count);}return increment;
}var counter = createCounter();
counter(); // 1
counter(); // 2

注意事项

  • 避免使用全局变量,以减少命名冲突和不良的代码组织。

  • 变量声明的位置很重要,使用变量提升将变量声明放在作用域的顶部。

  • 避免滥用闭包,及时释放不再需要的变量引用,以避免内存泄漏。

结论

JavaScript的作用域和作用域链是理解这门语言的重要概念。静态作用域在函数定义时确定作用域链,动态作用域在函数调用时确定作用域链。作用域链决定了变量和函数的可访问性。理解作用域和作用域链会帮助您编写更好的JavaScript代码。

相关文章:

JavaScript作用域与作用域链

JavaScript作用域与作用域链 JavaScript的作用域和作用域链是理解这门语言的关键概念之一。作用域指的是变量和函数在程序中可被访问的范围。作用域链是由函数的嵌套关系决定的变量对象的链式结构。 静态作用域与动态作用域 JavaScript使用静态作用域,也称为词法…...

MQTT异常掉线原因

一、业务场景 我们在使用MQTT协议的时候,有些伙伴可能会遇到MQTT客户端频繁掉线、上线问题 二、原因分析及异常处理 1.原因:使用相同的clientID 方案:全局使用的clientID保证唯一性,可以采用UUID等方式 2.原因: 当前用户没有Top…...

重新理解百度智能云:写在大模型开放后的24小时

在这些回答背后共同折射出的一个现实是——大模型不再是一个单选题,而更是一个综合题。在这个新的时代帆船上,产品、服务、安全、开放等全部都需要成为必需品,甚至是从企业的落地层面来看,这些更是刚需品。 作者| 皮爷 出品|产…...

Stable Diffusion 提示词技巧

文章目录 背景介绍如何写好提示词提示词的语法正向提示词负向提示词 随着AI技术的不断发展,越来越多的新算法涌现出来,例如Stable Diffusion、Midjourney、Dall-E等。相较于传统算法如GAN和VAE,这些新算法在生成高分辨率、高质量的图片方面表…...

VS2019编译curl库

下载: curl-7.61.0.tar.gz 编译: 解压到一个文件下,然后右键以管理员权限运行buildconf.bat 编译x64的库使用的是x64 Native Tools Command Prompt for VS 2019 本机工具命令提示,如果想编译x86的库,可以选择x86 Nat…...

yolov5自定义模型训练三

经过11个小时cpu训练完如下 在runs/train/expx里存放训练的结果, 测试是否可以检测ok 网上找的这张识别效果不是很好,通过加大训练次数和数据集的话精度可以提升。 训练后的权重也可以用视频源来识别, python detect.py --source 0 # webca…...

服务器中了mkp勒索病毒该怎么办?勒索病毒解密,数据恢复

mkp勒索病毒算的上是一种比较常见的勒索病毒类型了。它的感染数量上也常年排在前几名的位置。所以接下来就由云天数据恢复中心的技术工程师来对mkp勒索病毒做一个分析,以及中招以后应该怎么办。 一,中了mkp勒索病毒的表现 桌面以及多个文件夹当中都有一封…...

Docker环境搭建Prometheus实验环境

环境: OS:Centos7 Docker: 20.10.9 - Community Centos部署Docker 【Kubernetes】Centos中安装Docker和Minikube_云服务器安装docker和minikube_DivingKitten的博客-CSDN博客 一、拉取Prometheus镜像 ## 拉取镜像 docker pull prom/prometheus ## 启动p…...

Python Qt学习(七)Listview

源代码: # -*- coding: utf-8 -*-# Form implementation generated from reading ui file qt_listview.ui # # Created by: PyQt5 UI code generator 5.15.9 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not…...

哈希表HashMap(基于vector和list)

C数据结构与算法实现(目录) 1 什么是HashMap? 我们这里要实现的HashMap接口不会超过标准库的版本(是一个子集)。 HashMap是一种键值对容器(关联容器),又叫字典。 和其他容易一样…...

go中的函数

demo1:函数的几种定义方式 package mainimport ("errors""fmt" )/* 函数的用法 跟其他语言的区别:支持多个返回值*///函数定义方法1 func add(a, b int) int {return a b }//函数定义方法2 func add2(a, b int) (sun int) {sun a breturn s…...

小试 InsCode AI 创作助手

个人理解: 自ChatGPT新版现世,一直被视面替代人工工作的世大挑战,各类人工智能语言生成工目层出不穷,也在不断影响着我们日常的工作和生活 小试CSDN的InsCode AI: - 基本概念查询方便,与个人了解&…...

粉丝经验分享:13:00 开始的面试,13:06 就结束了,问题真是变态

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

SASS的@规则

1,import sass扩展了import导入,对于css,import导入在页面加载的时候去下载导入的外部文件,而sass的导入,在编译成css文件的时候就将外部的sass文件导入合并编译成一个css文件。 他支持同时导入多个文件;…...

【C++初阶】模拟实现优先级队列priority_queue

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…...

如何为你的公司选择正确的AIGC解决方案?

如何为你的公司选择正确的AIGC解决方案? 摘要引言词汇解释(详细版本)详细介绍1. 确定需求2. 考虑技术能力3. 评估可行性4. 比较不同供应商 代码快及其注释注意事项知识总结 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&…...

Windows下将nginx等可执行文件添加为服务

Windows下将nginx等可执行文件添加为服务 为什么将可执行文件添加为服务?将可执行文件添加为服务的步骤步骤 1:下载和安装 Nginx步骤 2:添加为服务方法一:使用 Windows 自带的 sc 命令方法二:使用 NSSM(Non…...

视觉SLAM14讲笔记-第4讲-李群与李代数

李代数的引出: 在优化问题中去解一个旋转矩阵,可能会有一些阻碍,因为它对加法导数不是很友好(旋转矩阵加上一个微小偏移量可能就不是一个旋转矩阵),因为旋转矩阵本身还有一些约束条件,那样再求…...

浅析Redis(1)

一.Redis的含义 Redis可以用来作数据库,缓存,流引擎,消息队列。redis只有在分布式系统中才能充分的发挥作用,如果是单机程序,直接通过变量来存储数据是更优的选择。那我们知道进程之间是有隔离性的,那么re…...

【每日一题】2337. 移动片段得到字符串

【每日一题】2337. 移动片段得到字符串 2337. 移动片段得到字符串题目描述解题思路 2337. 移动片段得到字符串 题目描述 给你两个字符串 start 和 target ,长度均为 n 。每个字符串 仅 由字符 ‘L’、‘R’ 和 ‘_’ 组成,其中: 字符 ‘L’…...

94吨黄金“上链搬家”,手续费仅0.0016%!黄金RWA正在改写跨境资产流动

传统金融数百万美元的物流成本vs区块链毫厘之间的链上费用,资产数字化的未来已来。近日,Tether首席执行官Paolo Ardoino在X平台发文称:过去6个月内,共有价值约94吨黄金的代币化黄金XAUT在链上完成转移,合计手续费仅约0…...

Azure IoT Hub AMQP传输层深度解析与嵌入式实践

1. Azure IoT Hub AMQP 传输层技术深度解析Azure IoT Hub 是微软面向物联网场景构建的高可靠、可扩展云平台,其核心能力依赖于多种协议栈的协同支持。在众多通信协议中,AMQP(Advanced Message Queuing Protocol)因其固有的消息可靠…...

TX12 + ExpressLRS 915MHz RC链路优化与EdgeTX固件升级实战

1. 为什么选择TX12搭配ExpressLRS 915MHz系统 玩无人机的朋友都知道,遥控链路就像风筝线,距离和稳定性直接决定飞行体验。我之前用2.4GHz的RadioLink套装,飞到500米就开始心跳加速——信号时断时续,每次返航都像在赌运气。换成TX1…...

实战应用:基于openclaw在快马平台开发招聘信息采集系统

最近在做一个招聘信息分析的小项目,需要从各大招聘网站采集数据。经过一番调研,发现openclaw这个工具在数据采集方面表现相当不错,特别是在处理复杂页面和反爬机制上很有优势。下面分享一下我在InsCode(快马)平台上开发这个系统的实战经验。 …...

2026年4月OpenClaw(Clawdbot)一键部署及接入Skills保姆级教程,让OpenClaw(个人AI助手) 7*24 小时为你工作!

2026年4月OpenClaw(Clawdbot)一键部署及接入Skills保姆级教程,让OpenClaw(个人AI助手) 7*24 小时为你工作!OpenClaw(原Clawdbot)作为2026年主流的AI自动化助理平台,可通过阿里云轻量服务器实现7…...

告别烧脑报文!用ESP8266+51单片机零基础玩转OneNet MQTT(附报文生成工具)

从零到一:ESP8266与51单片机轻松对接OneNet MQTT全指南 当你第一次听说MQTT协议时,是否被那些晦涩的十六进制报文吓退?作为物联网领域最流行的轻量级通信协议,MQTT本应让设备间的对话变得简单,但传统教程中复杂的报文…...

基于STM32微控制器的DHT11环境温湿度监测系统设计与实现

基于stm32的环境温湿度监测系统设计(DHT11)最近在折腾STM32的环境监测小项目,发现DHT11这玩意儿真是便宜又好用。虽然精度比不上那些高端传感器,但做个室内温湿度监控绰绰有余。今天咱们直接开干,手把手搭个能跑的系统。硬件部分简单到哭&…...

P3C代码规范检查:风险驱动架构下的动态治理策略

P3C代码规范检查:风险驱动架构下的动态治理策略 【免费下载链接】p3c Alibaba Java Coding Guidelines pmd implements and IDE plugin 项目地址: https://gitcode.com/gh_mirrors/p3/p3c 在数字化转型浪潮中,企业级Java应用面临代码质量与开发效…...

CW32L012FOC开源项目推进

作为一枚合格的“职场摸鱼学”实践者(手动狗头),我坚决不建议在长假结束后立刻全身心扎进任务清单。那太不“可持续发展”了。 所以,今天上午,我可以理直气壮地把“整理工位”作为最高优先级。说得具体点,…...

阅读APP书源完全指南:3种快速导入方法与问题解决方案

阅读APP书源完全指南:3种快速导入方法与问题解决方案 【免费下载链接】Yuedu 📚「阅读」自用书源分享 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 「阅读」APP书源开源项目为小说爱好者提供了一个强大的解决方案,让您能够在一…...