js全局变量详解

js全局变量详解前言本文主要介绍3种全局变量的定义方式以及开发中会遇到的一些问题,再加上一点个人见解。首先简单的介绍一下3种全局变量的定义方式vara=1;//方式1b=2;//方式2window.c=3;//方式3这3种形式定义出来的全局变量都属于window对象对于方式1我们都不陌生,方式3也看过不少,方式2的隐似创建方式我们或多或少都干过,例如vara=1;funct

大家好,又见面了,我是你们的朋友全栈君。

前言
本文主要介绍3种全局变量的定义方式以及开发中会遇到的一些问题,再加上一点个人见解。

首先简单的介绍一下3种全局变量的定义方式

var a = 1;//方式1
b = 2;//方式2
window.c = 3;//方式3

这3种形式定义出来的全局变量都属于window对象
对于方式1我们都不陌生,方式3也看过不少,方式2的隐似创建方式我们或多或少都干过,例如

var a = 1;
function b(){ a = 2; } alert(a);//1
b();
alert(a);//2

我们可能在一个函数内定义一个变量,漏了var,就会被认为是全局变量的定义,忽略当前的作用域,所以我们平时定义变量时候切记加上“var”关键字,就像比较用“===”一样,不然程序bug了,有你好受。

我们再看看这3种定义方式的优先级别,看程序

var a = 1;
a = 2;
window.a= 3;
alert(a);//3

b = 2;
window.b= 3;
var b = 1;
alert(b)//1

var c = 1;
window.c= 3;
c = 2;
alert(c)//2

上面也提到过这3种方式定义的变量都属于window对象,所以没有优先级别,只有先后顺序。

var理所当然是最推荐的方式,但是var也有“特别之处”,下面我们来看看它的另类

alert(a);//error
a = 1;

alert(a);//error
window.a = 1;

alert(a);//undefined
var a = 1;

是不是有点奇怪,说好的兄弟情义呢,这是因为var修饰的变量会预定义,至于为什么,这是js解析器的做法,暂且不讨论。预定义就是在脚本执行之前就会定义变量,所以这里弹出的结果是undefined,而其他则是error。

我们再来测试测试delete

var a = 1;
b = 2;
window.c= 3;
delete a;
delete b;
delete c;
alert(a);//1
alert(b);//error b is not defined
alert(c);//error c is not defined

这个结果告诉了我们,var修饰的全局变量 是无法被GC回收的,也就是说,var定义的全局变量从被定义开始就一直待在内存中知道程序结束。

顺带也说下function的定义方式,在全局作用作用域下,function对象的用以上3种方式没有区别,也只会存在于当前作用域,不会像普通变量不用var修饰会上升成全局变量这种事

function a()
{
    b = 1;
}
function c(){
    function a()
    {
        b = 2;
    }
}
alert(a);//function a(){b = 1;}

最后讲讲个人对全局变量的一些认识和见解
优点:全局变量一次定义赋值后可以在整个程序中使用,对于常用的对象定义为全局变量,不管对于资源、效率或者编码上都很不错。
缺点:全局变量定义后就会常驻内存,消耗资源;全局变量在一个作用域,对于开发者来说是个挑战,特别是大型项目;这两个问题完全可以由我们coder去避免。但是全局变量的使用会影响代码的封装性和可读性,这个我认为才是头疼的了,所以在全局变量命名上语义化得认真些~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133302.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 聊天室源码_h5聊天室源码

    聊天室源码_h5聊天室源码http://zhidao.baidu.com/question/33926814.html?fr=qrl&fr2=query

    2025年8月11日
    2
  • vdbench的作用_vdbench

    vdbench的作用_vdbench一、vdbench安装1、安装java:java-version(vdbench的运行依赖于java)2、检测vdbench能够使用:进入vdbench相应目录下./vdbench-t来测试一下vdbench的可用性,如果正常,会在目录下自动生成一个output目录。root@node1:/home/vdbench/vdbench50406#./vdbench-t如果报错,则需修改vdb…

    2022年5月20日
    76
  • Java快速入门

    Java快速入门1Java简介太阳计算机系统(中国)有限公司1982年成立2009年被Oracle收购甲骨文股份有限公司1977年成立2013年成为全球第二大软件公司詹姆斯·高斯林(JamesGosling)Java编程语言的共同创始人之一一般公认他为“Java之父”1.1Java发展史20世纪90年代,出现了单片机。1991年,Sun公司成立了Green项目小组,专攻家电产品上的嵌入式应用,开发出了一种称为Oak的面向对象语言。1992年,Oak语言开发成功后,因为缺

    2022年6月5日
    30
  • jQuery hover() 方法

    jQuery hover() 方法定义和用法hover()方法规定当鼠标指针悬停在被选元素上时要运行的两个函数。方法触发 mouseenter 和 mouseleave 事件。注意:&#

    2022年7月3日
    24
  • stm32编程入门书籍_STM32开发板

    stm32编程入门书籍_STM32开发板1.STM32需要了解的基础知识STM32系列专为要求高性能、低成本、低功耗的嵌入式应用设计的ARMCortex®-M0,M0+,M3,M4和M7内核,按内核架构分为不同产品:主流产品(STM32F0、STM32F1、STM32F3)、超低功耗产品(STM32L0、STM32L1、STM32L4、STM32L4+)、高性能产品(STM32F2、STM32F4、STM32F7、STM32H7)。内核是ARM公司统一设计的于ARMv7架构的Cortex系列由ARM公司在2006年推出,Co

    2025年9月29日
    3
  • 在线名片设计_diy名片代码在线生成

    在线名片设计_diy名片代码在线生成小小名片,看似简单,它要经过以下八道工序才能到你手中。其间你还得参与名片制作的前期工作,你要对名片印刷方式、印刷难易、印刷用纸选择;你还得提供名片的具体内容,设计大致思路;大多数时间你还得要校稿,特别是要求较高的复杂的名片,商家都有如此请求。名片后期加工也较复杂,需要专业设备和熟练的操作人员。以往,我们得亲自前往名片印刷店印刷,一盒名片也许要去好多趟,好在有了互联网,现在简单了。你大可一边喝着咖啡…

    2025年7月25日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号