Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
js全局变量详解_javascript全局函数有哪些,希望能够帮助你!!!。
前言
本文主要介绍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去避免。但是全局变量的使用会影响代码的封装性和可读性,这个我认为才是头疼的了,所以在全局变量命名上语义化得认真些~
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章