关于js里面的变量范围

JavaScript变量范围的不同 在JavaScript编程中,变量的范围是指变量在代码中的可访问性和生命周期。JavaScript中有两种主要的变量范围:全局范围和局部范围(函数范围)。全局范围的变量在整个程序中都可访问,而局部范围的变量只能在定义它们的函数内部访问。JavaScript中的变量范围决定了变量在代码中的可访问性和生命周期。全局范围的变量在整个程序中可访问,而局部范围的变量只能在定义它们的函数内部访问。除了变量的可访问性之外,变量的生命周期也是很重要的。全局范围的变量在整个JavaScript程序中都是可访问的。 阅读详情

今天写一个滑动自动加载的功能的时候,遇到了切换就发现加载完毕的情况,查看了下发现可能是js的全局变量和局部变量的问题,自己测试了下,果不其然,下面分享下。

先上两段代码

<script>
var i = 2;
function test(){
	var i = 1;
}
test();
alert(i);//值为2
</script>

<script>
var i = 2;
function test(){
	i = 1;
}
test();
alert(i);//值为1
</script>

是不是觉得很奇怪,我当时也是这样搞晕了,代码没问题啊,咋回事,最后找了找,原来是var作怪。我自己的理解是,var是用来申明变量的,在方法体里面申明的就是局部变量,局部变量自然不会影响到全局变量的值了。所以第一段代码alert出来的是2;第二段由于没有用var关键词申明,所以默认用的是全局的i的值,在全局里面改变全局变量的值,所以全局变量i的值被修改成1了。

下面再多看几个demo

<script>
/*这个很简单,就是改变全局的值*/
var i = 2;
function test(){
	alert(i);//弹框2
	i = 1;
	alert(i);//弹框1
}
test();
alert(i);//弹框1
</script>


<script>
/*这里就有点奇怪了,为啥第一个alert弹框是undefine呢?*/
var i = 2;
function test(){
	alert(i);//弹框undefined,查了下,这个i不是全局变量,因为在function scope里已经声明了,var i = 1;所以全局的i被覆盖了,这说明了js在执行前会对整个脚本文件的定义部分做完整分析,所以在test()函数执行前,函数体中的变量i都已经被指向了内部的局部变量,而不是指向外部的全局变量,但这是i还没有申明和赋值,所以弹的是undefined。(从刀刀的专栏(http://blog.youkuaiyun.com/zyz511919766/article/details/7276089)得知)
	var i = 1;
	alert(i);//弹框1 这里已经赋值了1,然后在函数体里面,所以弹值是1
}
test();
alert(i);//弹框2 因为局部变量不会影响全局变量,所以这里弹的值是2
</script>

<script>
var i =1;
function test(){
	alert(i);//undefined 这个上一段代码已经说了,js会先做解析,只要有var,就会只想局部变量,但是这个时候同样还没定义和赋值,所以undefined
	i=2;
	alert(i)//2 已经赋值了,所以是2
	var i;
	alert(i);//2 这里还是2.因为在前面已经把2赋值给i了
}
test();
alert(i);//1 弹全局的值,毫无疑问
</script>

<script>
/**如果我们方法体里面变量名是一样,但是我又要用到全局的变量怎么办呢**/
var i =1;
function test(){
	var i = 2;
	alert(i);//这里是2,不解释
	alert(window.i);//这里是1 因为用window.globalVariableName方式可以访问到全局的i
}
test();
alert(i);//这里是1,不解释
</script>

解释性文字都写在代码里面,大家搞不懂,可以运行下,就到这了

TongWeb微服务部署实战:Nacos注册与网关路由的疑难解析 本文分享了将Spring Cloud微服务迁移至TongWeb应用服务器时,解决Nacos服务注册失败与Spring Cloud Gateway路由失效的实战经验。针对Nacos注册问题,通过实现ApplicationRunner接口并利用JMX获取容器端口,实现了手动注册;针对网关路由问题,建议将基于WebFlux的Gateway模块改为JAR包独立部署,以保障其原生运行环境。文章为在TongWeb上进行微服务部署提供了关键的问题排查思路与混合架构部署的最佳实践。 阅读详情

相关推荐

Vue3 + EventSource 实战:手把手教你打造实时AI聊天悬浮窗(附完整代码)

本文详细介绍了如何使用Vue3和EventSource技术构建一个实时AI聊天悬浮窗。文章从产品化视角出发,重点讲解了流式数据接收与渲染、悬浮窗UI交互的工程化实现、性能优化及高级功能,并提供了完整的代码示例,帮助开发者快速集成功能完整的AI问答系统。

assembly8low的博客 846

JS中声明变量,使用 var、let、const的区别

1、var声明是全局作用域或函数作用域,而let和const是块作用域。2、var变量可以在其范围内更新和重新声明;let变量可以被更新但不能重新声明;const变量既不能更新也不能重新声明。3、它们都被提升到其作用域的顶端。但是,虽然使用变量undefined初始化了var变量,但未初始化let和const变量。4、尽管可以在不初始化的情况下声明var和let,但是在声明期间必须初始化const。

KevinChen2019的博客 3287

手把手拆解:储能电站如何实现‘孤岛运行’与‘黑启动’?从SVPWM控制到无缝并网

本文深入解析储能电站的孤岛运行与黑启动技术,从SVPWM控制策略到电网重构实战。通过详细的三环控制架构和黑启动五阶段技术路线,展示储能电站在电网故障时如何快速切换为独立电压源并实现电网重建。文章还探讨了虚拟惯量补偿、多站协同控制等前沿技术,为电力系统应急恢复提供关键解决方案。

weixin_30509393的博客 306

javaScript中var变量的作用域

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>javaScript中var变量的作用域</title> </head> <body> <h1>javaScript中var变量的作用域</h1...

一只苟延残喘的卑微蝼蚁 1743

图形化界面无限转圈?CentOS 7的SELinux避坑指南(附命令行修复实录)

本文详细解析了CentOS 7图形界面启动时无限转圈或卡在'starting switch root'的故障原因,主要与SELinux安全策略冲突有关。提供了三种修复方案:临时禁用SELinux、重装策略包和精细调整策略,并分享了长期维护建议,帮助用户平衡系统安全性与可用性。

potato的博客 799

单细胞数据pseudobulks差异分析实战:从聚合到DESeq2

本文详细介绍了单细胞转录组数据分析中pseudobulks(伪散装)方法的实战流程。通过将同一样本的同类型细胞表达值聚合,模拟Bulk RNA-seq数据,再利用DESeq2进行稳健的差异基因分析。该方法有效降低了单细胞数据的技术噪音,特别适用于样本量有限但追求结果稳定性的研究场景,并提供了完整的R代码实现与结果解读指南。

sea99的博客 761

JS中var、let、const的区别

var关键字: var声明的范围是函数作用域;即:var在函数内部声明一个变量,那么这个变量是该函数的局部变量,只有在函数内部才能访问,函数外部无法访问(当然如果用闭包可以实现从外部访问,关于闭包:JS中的闭包) var 关键字在全局全局作用域中声明的变量会成为window对象的属性 如果在非严格模式下的函数中,未用var声明就给一个变量赋值,那么该变量会变成全局变量,即在函数外部也可访问;而在严格模式下这样给未声明的变量赋值会报错ReferenceError(未定义/引用错误) function te

weixin_45646245的博客 396

论文阅读4——一种宽频带圆极化微带天线的设计

论文阅读——一种宽频带圆极化微带天线的设计(现在才觉得开始弄懂了一点,懂了一点之后又更糊涂了……)

weixin_64612422的博客 2317

js的变量

什么是变量? 变量的使用、变量语法扩展以及变量命名规范

qq_44757223的博客 560

手把手教你用89C52单片机驱动0.96寸OLED(IIC接口,附完整代码)

本文详细介绍了如何使用89C52单片机通过I2C接口驱动0.96寸OLED显示屏,包括硬件连接、I2C通信原理、SSD1306驱动芯片的初始化及显存管理技巧,并提供了完整的代码示例和常见问题排查方法,帮助电子爱好者快速掌握OLED显示技术。

weixin_30781433的博客 370

Simulink仿真模块 - Signal Conversion

目录 说明 实例 创建总线信号的连续副本 ​将虚拟总线转换为非虚拟总线​ 将非虚拟总线转换为虚拟总线 将Muxed信号转换为矢量 模块特性 Signal Conversion:将信号转换为新类型,而不改变信号值 在仿真库中的位置为: Simulink / Signal Attributes HDL Coder / Signal Attributes 模型为: 说明 Signal Conversion模块可将信号从一种类型转换为另一种类型。要选择要...

jk_101的博客 3421

在js中变量的有效范围问题

JavaScript中变量的作用 本文适合JS初学者,大神请绕路! 1.在方法中定义一个变量的时候不用var的情况 //告诉浏览器的解析器当前文件的保存的编码格式,让解析器用GB2312编码来解析此文档 在方法中定义一个变量的时候不用var的情况 function f1(){ x=100; alert('方法内X:'+x); } alert

bigZYQ的博客 2707

基于STM32的智能鞋柜系统设计与实现

摘要:本文设计并实现了一种基于STM32F103C8T6单片机的智能鞋柜系统。该系统通过DHT11温湿度传感器、PM2.5粉尘传感器和MQ-135空气质量传感器构建多维度环境监测网络,结合光电红外传感器和光敏传感器实现柜门状态识别与智能照明。系统采用分层控制策略,当温度低于15℃或湿度高于65%时自动启动加热和通风,PM2.5超标时启动通风,污染物浓度升高时激活紫外线杀菌。创新性地实现了柜门状态与紫外线消毒的双保险互锁机制,确保使用安全。测试结果表明,系统温湿度控制精度达±0.4℃/±2.0%RH,PM2.

3254968421的博客 253

js变量的作用范围

前言:写着写着项目,看着日益繁多的js变量,突然对js变量的作用范围产生了兴趣,所以来研究一下,鉴于本人主要是搞后端的,这个主要是入门级js变量范围介绍. 目录 第一章 不同script块中的js变量 1.1 先定义 1.2 后定义 1.3.1 另一种定义方式 第二章 定义在js文件中的变量 2.1 先定义 2.2 后定义 2.2.1 另一种定义方式 第三章 js块中的函数 ...

仰望星空 954

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【JS】347- 理解JavaScript中的变量、范围和提升

变量是许多编程语言的基本组成部分,也是新手需要学习的第一个也是最重要的概念。JavaScript中有许多不同的变量属性,以及命名变量时必须遵循的一些规则。在JavaScr...

pingan8787 341

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

js变量定义以及作用范围

js变量定义以及作用范围js变量定义全局变量的定义局部变量变量提升 js变量定义 var 变量名; js定义变量时不需要申明具体类型,其类型由赋值的变量决定; 比如var a =12;则a的类型为整型;var a=“则12”,则a为字符串型; 注意:在变量定义时一定要加上var;不然定义的变量将会上升到全局变量,造成逻辑错误(及其致命); 全局变量的定义 顾名思义有及作用于全局的变量, <s...

weixin_41571206的博客 833

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

javascript 变量的作用范围

变量的作用范围又称为作用域,是指某变量在程序中的有效范围。根据作用域,变量可以分为全局变量和局部变量。 1  全局变量的作用域是全局性的,即在整个JavaScript程序中,全局变量处处都在。 2  而在函数内部声明的变量,只在函数内部起作用。这些变量是局部变量,作用域是局部性的;函数的参数也是局部性的,只在函数内部起作用。         在函数内部,局部变量的优先级比同名的全局变量优

bbwdd的博客 1048

js中的变量范围

Javascript的变量范围是以函数为基础的。每个函数都有它自己的变量范围,而不是花括弧包起来的范围。 var herp=”one”;  {  var herp=”two”;  }  alert(herp);  你会发现 弹出的是two而不是one.

diligentcat的专栏 699

JS中作用域以及变量范围

变量作用域 js作为一门脚本语言,他与c,java这些语言是不相同的。 全局变量 在js中声明全局变量,有下面几种方式: 1.在函数外通过var来声明。 var test ="hello"; console.log(test); function a(){ test="xx"; console.log(test); } a(); console.log(test); ...

骚小孩啊丶 5877

javascript变量范围

介绍:(Introduction:) This article is first part of very important topics in javascript which covers the basics of programming in javascript. 本文是javascript中非常重要的主题的第一部分,涵盖了javascript编程的基础。 In this articl...

weixin_26714477的博客 443

javascript的变量范围

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34419321的博客 115

Javascript变量类型和范围

We hold data in variables. Variable is used as a container for our data. Think about holding a name. 我们将数据保存在变量中。 变量用作我们数据的容器。 考虑持有一个名字。 Code: 码: var name="Poftut"; console.log(name); varis shortc...

cunjiu9486的博客 251

JavaScript中变量的定义方式和作用范围

一、变量:JavaScript的变量是松散类型的,所谓松散类型是可以用来保存任何类型的数据;并且一个变量的值类型是可变的。1、定义方式:A、使用var操作符(关键字),后跟变量名的形式。B、不适用var关键字,使用时直接赋初值。【不推荐】2、作用范围:根据范围不同,变量分为:全局变量和局部变量。函数外边直接定义的变量称为全局变量,函数内部定义的变量称为局部变量。如:注:JavaScript中函...

Cici的博客 538

JavaScript变量 没有块范围

局部变量覆盖全局变量,如下:   //定义全局变量test var test = "全局变量"; //定义函数checkscope function checkscope() { //定义局部变量 // var test = "局部变量"; //输出局部变量 document.writeln(test+""); alert(test);

cactusz的博客 356

JavaScript中的变量作用范围

    变量的作用范围又称为作用域,是指某个变量在程序中的有效范围。根据作用域的不同,可以分为全局变量和局部变量。      对于JavaScript来说,没有块级作用域的概念,函数中声明的所有变量无论是在哪里声明的,在整个函数中都会有意义的。如: function test(q){ var x=0; if(typeof(q)=="object"){ var y=0...

blessdyb的专栏 277
上一篇: PHP序列化反序列化serialize和unserialize函数
下一篇: php函数和语法结构
键盘钢琴师
博客等级 码龄11年 21粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值