javaScript之局部变量,全局变量与局部作用域,全局作用域

news/2024/10/4 5:33:58
  1. 前端开发工作者,最需要学习的一门语言就是JavaScript了吧,其实学习大部分编程语言都是从基本的语法知识开始人门的。什么语句、变量、数据类型、对象、函数...今天本文就简单说明javaScript变量中的一个小小的知识点,其实在后面的最开始工作编程中我也是常常容易出现bug的一个点。
  2. 什么是javaScript变量?简单来说就是用于存储信息的"容器"。(以下是变量命名的一些规定)
    • 变量必须以字母开头
    • 变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)
    • 变量名称对大小写敏感(X和 x 是不同的变量)
  3. 什么是javaScript作用域?

作用域是可访问变量的集合,个人理解就是在一段代码内可以访问到的变量,实际工作是常常控制台常常会报错 '' xxx变量 is not defined''就是代码运行时没有办法访问到该变量。当然可能确实是没有定义该变量,但是还有一种情况就是在当前作用域范围内没有办法访问到该变量。

 

以上代码在控制台中运行时就会报错  脚本代码片段 #2:9  Uncaught ReferenceError: age is not defined,其实也不难理解因为age变量在函数sayHello中定义,导致在函数运行结束时age变量就被销毁了,根据不同作用域下定义的变量,可将变量分为局部变量,全局变量。

  • 变量在函数外定义,即为全局变量。全局变量有 全局作用域: 网页中所有脚本和函数均可使用。 如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。

  • 局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁。

4.JavaScript 变量生命周期

JavaScript 变量生命周期在它声明时初始化。局部变量在函数执行完毕后销毁。全局变量在页面关闭后销毁。(注意:函数参数只在函数内起作用,是局部变量)你的全局变量,或者函数,可以覆盖 window 对象的变量或者函数。局部变量,包括 window 对象可以覆盖全局变量和函数。

5.存在的问题:在 JavaScript 中,函数内部的局部变量通常不可以直接被外部作用域访问,但有几种方式可以将函数内的局部变量暴露给外部作用域,具体如下:

    • 通过全局对象:在函数内部,可以通过将局部变量赋值给 window 对象的属性来使其成为全局可访问的。例如,使用 window.a = a; 语句,可以在函数外部通过 window.a 访问到这个局部变量的值。
    • 定义全局变量:在函数内部不使用 var、let 或 const 等关键字声明变量时,该变量会被视为全局变量,从而可以在函数外部访问。但这种做法通常不推荐,因为它可能导致意外的副作用和代码难以维护。
    • 返回值:可以通过在函数内部使用 return 语句返回局部变量的值,然后在函数外部接收这个返回值。这样,虽然局部变量本身不会被暴露,但其值可以通过函数调用传递到外部。
    • 闭包:JavaScript 中的闭包特性允许内部函数访问外部函数的局部变量。即使外部函数执行完毕后,其局部变量仍然可以被内部函数引用。
    • 属性和方法:定义在全局作用域中的变量和函数都会变成 window 对象的属性和方法,因此可以在调用时省略 window,直接使用变量名或函数名。

6.补充:HTML 中的全局变量

在 HTML 中, 全局变量是 window 对象,所以 window 对象可以调用函数内的未声明(未加 var)的局部变量。注意:所有数据变量都属于 window 对象。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/29010.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

git拉取VUE并初次启动运行

一、通过从git项目中拉取项目后初次并启动运行 1、在vscode从git获取拉取项目 2、拉取项目后启动运行 (需要先安装npm --- npm install) 安装报错 解决: 1、复制这个路径,打开文件夹 (找到npm的安装路径,查看是否有node.exe的启动文件。)打开后会发现没有 2、找到nod…

docker搭建redis集群(三主三从)及重启redis集群 redis扩容新增集群

docker搭建redis集群(三主三从)及重启redis集群 一、docker搭建redis集群1、下载redis镜像文件从远程仓库先拉取一下redis的镜像文件,如果已经提前安装过镜像的,可以跳过此步骤: docker pull redis:6.0.82、查看本地拉取到镜像文件docker images 看到图上标识,就说明当前…

Go pprof 认知到实践

快速开始 测试环境:go version go1.22.2 windows/amd64,源代码开源在 https://github.com/oldme-git/teach-study/tree/master/golang/base/pprof 在正式开始之前,请确保安装 graphviz,这一步不可省略,它可以协助 pprof 生成更直观的数据分析图。可以参考官方网站的安装方…

C#与PLC变量在数据交互上的一些探索

1. 基于C#的数据交互 A. S7,using S7.Net,后文读写数据时二次封装过S7协议,这里暂且不表,只列举S7协议最原始的应用。new一个PLC对象//idenfy basic link paramsprivate string plc_ip;private CpuType plc_type;private short plc_rack, plc_slot;public Plc my_plc;my_plc…

三角函数之诱导公式

壹如上图: \[\begin{eqnarray} 已知: \enspace AC=\sin\alpha,BC=\cos\alpha \\ \\ \\ \sin\left(\frac{\pi}{2}-\alpha\right)=\frac{AD}{AB}=\frac{BC}{AB}=\cos\alpha \\ \\ 诱导公式组0.1: \enspace \sin\left(\frac{\pi}{2}-\alpha\right)=\cos\alpha \\ \\ \\ \cos\left(…

ubuntu下多jdk环境轻松却换

在实际coding生活中,维护老项目与开发新项目常是并行的。快速企业java开发jdk版本,收首先要解决的问题。 今天看到一篇Blog,参考配置后完美实现了一键快速切换,nice!!!!!! 环境: 1、ubuntu 22 2、openjdk1.8、openjdk17 具体操作步骤: 1、安装openjdk(略),安装位…

CentOS 7 部署 NET6.0 项目过程

1、环境配置NET6.0 环境搭建主要是SDK 和 runtime 的安装,下图截自官网说明了SDK 和 runtime 的关系CentOS7 安装SDK 方法第一步:rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm第二部:yum install dotnet-sdk-6.0也可以只安装对应的…

细说夜莺监控系统告警自愈机制

虽说监控系统最侧重的功能是指标采集、存储、分析、告警,为了能够快速恢复故障,告警自愈机制也是需要重点投入建设的,所有可以固化为脚本的应急预案都可以使用告警自愈机制来快速驱动。夜莺开源项目从 v7 版本开始内置了告警自愈模块,本文将详细介绍告警自愈的原理和实现。…