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航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞…...
如何为你的公司选择正确的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’…...
震惊!数十万家企业用软件监控员工,数据竟流向广告平台和经纪商!
官宣惊人内幕数十万家企业使用软件监控员工,新研究发现,许多职场监控工具不仅与雇主共享数据,还与数字广告平台和数据经纪商共享。研究详情这项研究由哥伦比亚法学院法律与经济中心高级研究员、前联邦贸易委员会首席技术专家斯蒂芬妮阮&#…...
跨镜头人物ID稳定性不足,深度拆解Sora 2的Temporal Identity Token机制与3层对抗对齐策略
更多请点击: https://kaifayun.com 第一章:跨镜头人物ID稳定性不足的根源诊断 跨镜头人物ID稳定性不足是多目标跟踪(MOT)系统在真实监控场景中面临的核心瓶颈。其本质并非单一模块失效,而是特征表征、时空建模与数据分…...
本地部署DeepSeek-V2.5遇到OOM?3类内存泄漏场景,90%开发者第2步就踩雷!
更多请点击: https://codechina.net 第一章:本地部署DeepSeek-V2.5的内存风险全景认知 本地部署DeepSeek-V2.5模型时,内存资源消耗远超常规LLM推理场景,其核心风险源于模型结构设计、量化策略兼容性及运行时上下文管理三重叠加效…...
安装 KubeSphere
安装 KubeSphere KubeSphere Core (ks-core) 是 KubeSphere 的核心组件,为扩展组件提供基础的运行环境。KubeSphere Core 安装完成后,即可访问 KubeSphere Web 控制台。 1. 安装 KubeSphere Core 在集群节点上,执行以下命令安装 KubeSpher…...
STC8A8K64S4A12单片机PWM调速实战:手把手教你搞定循迹小车的电机驱动与速度控制
STC8A8K64S4A12单片机PWM调速实战:从原理到电机精准控制 当你想让一个小车平稳地沿着黑线行驶,或者在转弯时保持优雅的姿态,PWM调速技术就是那个藏在幕后的魔术师。STC8A8K64S4A12这颗国产单片机内置的硬件PWM模块,正是实现这一切…...
信通院:人工智能模数共振体系研究报告(2026年)
这份由中国信通院与中车工业研究院 2026 年 5 月发布的《人工智能模数共振体系研究报告(2026 年)》,聚焦数据与模型双向共振,系统阐释模数共振体系内涵、核心要素、能力支撑、协同机制并给出落地建议,为 AI 与实体经济…...
找工厂用什么工具?为什么“收录企业更多“是个伪指标
很多人在选工商数据工具的时候,被一个指标带着走——“收录企业数量更多”。直觉上,数据库越大越好,选谁不选大的。 但如果你的实际需求是"找工厂"——上游销售要找工厂客户、采购方要找代工供应商、跨境卖家要找一手代工厂——这个指标对你毫无意义,甚至是负担。原因…...
LangGraph 实战:如何实现 Human-in-the-Loop(人机协同)工作流
LangGraph实战:从零构建生产级Human-in-the-Loop人机协同工作流 副标题:含中断/人工审核/分支路由全场景实现,覆盖金融/法律/企业服务90%+通用场景 第一部分:引言与基础 1.1 摘要/引言 你有没有遇到过这些场景: 用大模型做合同自动审核,结果模型漏判了关键合规条款,直…...
Unity动态设置Layer与摄像机屏蔽的完整闭环方案
1. 这不是“加个Layer”那么简单:为什么动态设置Layer常被误用却没人深究在Unity项目里,我见过太多人把“给GameObject动态设置Layer”当成一个随手就能调用的API——go.layer 12;,敲完回车,心里就默认“好了”。结果跑起来发现&…...
开关电源负反馈环路设计:从传递函数到稳定性实战
1. 项目概述:从“开环”到“闭环”的认知跃迁在电源设计,尤其是开关电源设计的领域里,“负反馈”是一个既基础又核心的概念。很多工程师在入门时,可能会把注意力集中在功率拓扑的选择、电感电容的计算、MOSFET的选型上,…...
