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

JavaScript 变量作用域与函数调用机制:var 示例详解

JavaScript 变量作用域与函数调用机制:var 示例详解

在 JavaScript 中,作用域和闭包是理解变量生命周期和行为的核心概念。通过以下这段代码,我们将详细分析如何在不同的作用域内使用 var 关键字,并解释相关的变量访问规则

代码解析

var name = "Hello, World"; // 1. 全局作用域中定义了 name,值为 "Hello, World"function echo() {console.log(name);  // 2. 输出 name 的值
}function env() {var name = "hello, kitty"; // 3. 在 env 函数内定义了局部变量 nameecho(); // 4. 调用 echo 函数
}env(); // 5. 调用 env 函数

执行流程

  • 全局作用域

    • 在全局作用域中,var name = “Hello, World” 赋值了一个全局变量 name,其值为 “Hello, World”
      var name = "Hello, World";
    
  • 定义函数 echo()

    • 函数 echo 定义了一个 console.log(name),该函数用于输出 name 变量的值
      var name = "Hello, World";
    
  • 定义函数 env()

    • 函数 env 内部首先声明了一个局部变量 name,并赋值为 “hello, kitty”。这个 name 变量只在 env 函数内部有效。
    • 然后,env 函数调用了 echo()
     function env() {var name = "hello, kitty";echo();}
    
  • 调用 env() 函数

    • 当 env() 被调用时,JavaScript 会执行 env 函数中的代码
    • 在 env() 内部,name 被声明为 “hello, kitty”,但是在调用 echo() 时,echo() 函数会输出 name,此时发生了作用域链的查找

关键点:作用域链(Scope Chain) 和 函数调用时的作用域

  • echo() 函数中的 name 是在全局作用域中查找的,因为 echo() 是在全局作用域中定义的。当 echo() 被调用时,它会首先在自己所在的作用域中查找 name,如果没有找到,就会继续在外部作用域中查找(即查找全局作用域)
  • 局部变量 name(在 env() 内部定义的 name)只对 env() 函数有效,对 echo() 函数没有影响
    • 由于 echo() 没有在其作用域内找到 name,它就会在外部的作用域中查找。在此情况下,echo() 找到了全局作用域中的 name,其值为 “Hello, World”

作用域链: echo() 函数查找 name 时,会首先查看其自己的作用域,然后查看外层作用域(直到全局作用域)。env() 中的局部 name 对 echo() 的执行没有影响,因为 echo() 查找的是全局作用域中的 name。

总结

  • 作用域链的概念: JavaScript 中的函数作用域遵循词法作用域规则,变量的查找顺序是从当前函数的作用域开始,依次向外查找,直到全局作用域为止。

  • 全局与局部变量的关系: 即使在一个函数内部声明了与全局变量同名的局部变量,这个局部变量仅对函数内部有效。函数外部的同名变量(如果有)不会被覆盖。

  • var 和作用域: 使用 var 声明的变量在其作用域内有效,如果函数内有同名变量,局部变量会覆盖函数内部的代码,但不会影响外部作用域中的变量

相关文章:

JavaScript 变量作用域与函数调用机制:var 示例详解

JavaScript 变量作用域与函数调用机制:var 示例详解 在 JavaScript 中,作用域和闭包是理解变量生命周期和行为的核心概念。通过以下这段代码,我们将详细分析如何在不同的作用域内使用 var 关键字,并解释相关的变量访问规则 代码解…...

Linux(CentOS)安装 JDK

1、下载 JDK 官网:https://www.oracle.com/ 2、上传 JDK 文件到 CentOS,使用FinalShell远程登录工具,并且使用 root 用户登录 3、解压 JDK 创建目录 /export/server mkdir -p /export/server 解压到目录 /export/server tar -zxvf jdk-17…...

AI产品经理实战手册:策略、开发与商业化指南

通过《AI产品经理手册》,将可以了解不同类型的AI,如何将AI整合到产品或业务中,以及支持创建AI产品或将AI集成到现有产品所需的基础设施。熟悉实践管理AI产品开发流程、评估和优化AI模型,以及应对与AI产品相关的复杂伦理和法律问题…...

【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用

【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用 目录 文章目录 【大语言模型】ACL2024论文-06 探索思维链COT在多模态隐喻检测中的应用目录摘要研究背景问题与挑战如何解决创新点算法模型1. 知识总结模块(Knowledge Summarization Module&…...

Linux之初体验

目录 第1关:1-Linux初体验 第2关:1-Linux常用命令 第3关:1-Linux 查询命令帮助语句 第4关:2--查询命令-locate 第5关:2--查询命令-which/whereis 第6关:2--查询命令-find 第7关:3-Linux文…...

现代化水电管理:Spring Boot在大学城的实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...

黑马官网2024最新前端就业课V8.5笔记---HTML篇

Html 定义 HTML 超文本标记语言——HyperText Markup Language。 标签语法 标签成对出现&#xff0c;中间包裹内容<>里面放英文字母&#xff08;标签名&#xff09;结束标签比开始标签多 /拓展 &#xff1a; 双标签&#xff1a;成对出现的标签 单标签&#xff1a;只有开…...

GS-Blur数据集:首个基于3D场景合成的156,209对多样化真实感模糊图像数据集。

2024-10-31&#xff0c;由韩国首尔国立大学的研究团队创建的GS-Blur数据集&#xff0c;通过3D场景重建和相机视角移动合成了多样化的真实感模糊图像&#xff0c;为图像去模糊领域提供了一个大规模、高覆盖度的新工具&#xff0c;显著提升了去模糊算法在真实世界场景中的泛化能力…...

Linux下Java的多种方式安装

Linux下Java的多种方式安装 博客&#xff1a; www.lstar.icu 开源地址 Gitee 地址&#xff1a; https://gitee.com/lxwise/iris-blog_parent Github 地址&#xff1a; https://github.com/lxwise/iris-blog_parent 序言 Java是一门面向对象的编程语言&#xff0c;不仅吸收了…...

Android Studio:connect time out

参考&#xff1a;Android Studio&#xff1a;connect time out_android studio connection timed out-CSDN博客...

A014-基于Spring Boot的家电销售展示平台设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…...

数学期望和联合概率密度

数学期望的定义 数学期望是描述随机变量平均趋势的一个重要统计量。根据随机变量的类型&#xff08;离散或连续&#xff09;&#xff0c;数学期望的定义有所不同。 离散型随机变量的数学期望&#xff1a; 若离散型随机变量 X X X取值为 x 1 , x 2 , … , x n , … x_1,x_2,\do…...

萤石私有化设备视频平台EasyCVR视频融合平台如何构建农业综合监控监管系统?

现代农业的迅速发展中&#xff0c;集成监控管理系统已成为提高农业生产效率和优化管理的关键工具。萤石私有化设备视频平台EasyCVR&#xff0c;作为一个具有高度可扩展性、灵活的视频处理能力和便捷的部署方式的视频监控解决方案&#xff0c;为农业监控系统的建设提供了坚实的技…...

【MongoDB】Windows/Docker 下载安装,MongoDB Compass的基本使用、NoSQL、MongoDB的基础概念及基础用法(超详细)

文章目录 Windows下载MongoDB Compass使用NoSQL的基本概念MongoDB常用术语MongoDB与RDBMS区别MongoDB的CRUD 更多相关内容可查看 Docker安装MongoDB可查看&#xff1a;Docker-安装MongoDB Windows下载 官网下载地址&#xff1a;https://www.mongodb.com/try/download/communi…...

微信小程序-自定义导航栏

一.自定义导航栏 1.JSON文件中配置"navigationStyle": “custom” "navigationStyle": "custom"2.给导航栏设置轮播图 <swiper class"custom-swiper" indicator-dots autoplay interval"2000"> <swiper-item>…...

vue中强制更新视图

vue3 中强制更新视图 方式 通过 $forceUpdate 与 vue2 相似 import {getCurrentInstance} from vueconst internalInstance getCurrentInstance() //操作数据后更新视图 internalInstance.ctx.$forceUpdate()通过 key 值改变更新 <compName :key"key" />co…...

mqsql 场景函数整理

场景1&#xff1a;行数据取多字段&#xff0c;取到有值为止 解决方案&#xff1a; mysql coaleace函数 场景2&#xff1a;字符串拼接文本并换行 解决方案1&#xff1a; mysql concate() 和char(10) 场景3&#xff1a;获取单汉字首拼 解决方案1&#xff1a;单汉字获取首拼 解…...

【AI日记】24.11.05 向量数据库 weaviate、混合搜索、多语言搜索、明确自己的南京

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 工作1 内容&#xff1a;学习deeplearning.ai的课程课程&#xff1a;Vector Databases: from Embeddings to Applications时间&#xff1a;6小时评估&#xff1a;不错&#xff0c;完成收获&#xff1a;学…...

Scrapy入门

Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。 安装scrapy pip install scrapy2.5.0 1.新建 Scrapy项目 scrapy startproject mySpider # 项目名为mySpider 2.进入到spiders目录 cd mySpider/mySpider/spiders 3.创建爬虫 scrapy gensp…...

Ubantu/Linux 采用Repo或Git命令报错!!

简言: 遇事还是不要慌,出现这些问题,很正常的;如果那些你不需要,只是需要回到某一个版本,那么就是需要,方法可以尝试回退节点,也可以尝试强行merge合入冲突,或找到冲突文件解决,但这些方法都非常的繁杂且不实用。以下是研究出来的解决方案! 记得随时使用git statu…...

Rusted PackFile Manager:免费创建全面战争模组的终极工具

Rusted PackFile Manager&#xff1a;免费创建全面战争模组的终极工具 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: https:/…...

Unity中Newtonsoft.Json三种安装方式深度对比

1. 为什么Unity项目里装个Json库要纠结三天&#xff1f;——从一次崩溃说起Newtonsoft.Json&#xff0c;也就是大家常说的Json.NET&#xff0c;在C#生态里几乎是序列化的代名词。但放到Unity里&#xff0c;它却是个“熟悉的陌生人”&#xff1a;你写惯了JsonConvert.SerializeO…...

2026年电工杯AB题|基础可冲!免费参赛 + 高含金量,保研 / 综测加分必看!重磅更新|独家原创|Python|Matlab代码|数学建模|论文|

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

MySQL 子查询优化:从慢查询到飞起的实战之路

开场白 说起 MySQL 子查询优化&#xff0c;这事儿我还真踩过大坑。有一次上线一个报表功能&#xff0c;SQL 里套了两层子查询&#xff0c;测试环境跑得挺快&#xff0c;上了生产直接把数据库干到 CPU 100%&#xff0c;整个系统卡了十分钟。后来 DBA 找过来&#xff0c;一看执行…...

告别ibus!Ubuntu 22.04 LTS下Fcitx5+搜狗输入法保姆级配置指南

Ubuntu 22.04 LTS 现代化输入方案&#xff1a;Fcitx5与搜狗输入法深度整合指南在Linux桌面环境中&#xff0c;输入法配置一直是中文用户面临的经典难题。Ubuntu 22.04 LTS作为长期支持版本&#xff0c;其默认的IBus框架对中文输入的支持始终差强人意。本文将带你探索更先进的解…...

机器学习加速格点QCD计算:从强子真空极化到重子质量修正

1. 项目概述&#xff1a;当格点QCD遇上机器学习在格点量子色动力学&#xff08;Lattice QCD&#xff09;的计算世界里&#xff0c;我们这些常年跟海量数据和超级计算机打交道的人&#xff0c;最头疼的问题之一就是“噪声”。这可不是实验室里嗡嗡响的那种声音&#xff0c;而是统…...

知识图谱与大语言模型协同:构建材料科学精准智能问答系统

1. 项目概述&#xff1a;当知识图谱遇见大语言模型“想象一下&#xff0c;未来有这样一个设备……个人可以存储他所有的书籍、记录和通信&#xff0c;并且它被机械化&#xff0c;可以以极高的速度和灵活性进行查阅。它是他记忆的一个放大的、亲密的补充。”——范内瓦布什&…...

Unity安装包瘦身实战:从2.3GB到680MB的工程化治理

1. 为什么一个500MB的Unity项目打包后会变成3GB&#xff1f;——安装包膨胀的真实逻辑“Unity安装包减肥”这六个字&#xff0c;听起来像在给软件做瑜伽&#xff0c;但实际是每个上线前夜都在咬牙硬扛的生存战。我做过7个已上线的Unity手游项目&#xff0c;最深的体会是&#x…...

【教育智能化临界点预警】:再不掌握AI Agent教学编排逻辑,3个月内将被首批智能助教替代

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;教育智能化临界点的本质判据与AI Agent不可逆替代趋势 教育智能化是否真正跨越临界点&#xff0c;不取决于技术参数的堆叠&#xff0c;而在于教学闭环中“决策权迁移”的可观测性——当AI Agent在备课、学情诊…...

储能 PACK 与 BMS:怎么识别有真实出货的系统集成厂,避开组装贴牌

储能赛道的门槛看起来不高&#xff1a;买一批电芯&#xff0c;叫几家代工厂组装成 PACK&#xff0c;挂上自己的品牌&#xff0c;就能对外声称是"储能系统集成商"。这条路在 2021 年到 2024 年的行业高速期被走通过无数次。于是&#xff0c;有真实产线、真实并网项目、…...