JavaScipt浅谈——全局变量和局部变量
来源:互联网 发布:网络借贷还不起怎么办 编辑:程序博客网 时间:2024/06/06 01:18
全局变量的作用域为所属的整个程序。
(3)使用 window.变量名 的形式定义
(4)使用window['变量名']的形式定义
局部变量的作用域为所属的函数内部。
执行函数c的时候,并非是从上到下依次执行的各条语句,而是先定义变量的语句提前执行,其他语句的执行顺序不变(也就是通常所说的函数声明提前)。所以执行函数C时会先返回预定义a的值为undefined而后返回局部变量a的值为1.
那么,全局变量和某个函数中的局部变量重命名,如何在该函数中获得同名全局变量的值。
全局变量优缺点:
优点:可以减少变量的个数,减少由于实参和形参的数据传递带来的时间消耗。
缺点:(1)全局变量保存在静态存储区,程序开始运行时,为其分配内存。程序结束运行时,释放其内存,相比于局部变量的动态分配和释放内存,全局变量的生命周期长,而且当全局变量数目较多时,会占用较大的内存。
(2)使用全局变量会破坏函数的封闭性和独立性。一个函数本来是通过传参和返回值来进行输入输出的,但是用了全局变量之后,该参数就可以不仅只通过原有的参数和返回进行输入输出,这样原有的封闭性就会被破坏。这也是导致函数的可移植性降低。
(3)当一个全局变量多次被不同的语句操作,全局变量的值容易变得不清晰。这便降低了程序的可读性,不利于在编码后进行调试和查错之类的操作。
局部变量的优缺点:
优点:(1)局部变量是程序动态分配内存,所以生命周期短,不会造成长时间占用过多内存的情况。
(2)局部变量定义在函数内部,限于函数内部调用,故能很好的保持函数的封闭性。
(3)即使在多个函数内部定义了多个同名局部变量,它们之间也不会相互影响。
缺点:(1)局部变量中的数据在函数执行完后就会消失,故不利于数据的保留。
(2)局部变量的使用范围有限,仅限于所属函数的内部。
以下示例是对以上理论的综合运用:
值得注意的是:函数调用之后,局部变量释放,即使同名于全局变量,也不会对全局变量有任何影响。
这是因为只有当函数调用之后,全局变量b才能有有效的!
全局变量的定义形式有: (1)在函数外定义
(2)在函数内定义,但不加var声明(3)使用 window.变量名 的形式定义
(4)使用window['变量名']的形式定义
局部变量的作用域为所属的函数内部。
局部变量的定义形式有: (1)在函数内部定义的变量 (2)函数中用到的形式参数
示例:<script> var a=0;//全局 b=0;//全局 function c(){ var d=0;//局部 e=0;//全局 return d; } console.log(a);//0 console.log(b);//0 console.log(c());//0,打印的是d的值 console.log(e);//0,函数调用之后,e是有效的全局变量 console.log(d);//报错:d is not defined,函数调用后,作用域销毁,变量d变为未定义。</script>
几种情况:函数声明提前以及全局变量和局部变量重命名的问题。<script> var a=0;//全局 function c(){ console.log(a); var a=1;//局部 console.log(a); return a; } console.log(a);//0 c();//undefined,1</script>
未执行函数c的时候 console.log(a);调用的是全局变量a。执行函数c的时候,并非是从上到下依次执行的各条语句,而是先定义变量的语句提前执行,其他语句的执行顺序不变(也就是通常所说的函数声明提前)。所以执行函数C时会先返回预定义a的值为undefined而后返回局部变量a的值为1.
相当于以下代码:
function c(){ var a; console.log(a); var a=1;//局部 console.log(a); return a; }
在函数C中定义了一个与全局变量一样的局部变量a时,函数C内部就会重新定义一个局部变量a,并将之前定义的全局变量a覆盖。不过,这个局部变量a只是在函数c中有定义,仅此而已。所以在函数C中,当第一次打印a时,实际上只定义了局部变量a,而未赋值,所以打印结果为undefined。执行第二条打印局部变量a时,已经对其进行了赋值,所以结果为1。那么,全局变量和某个函数中的局部变量重命名,如何在该函数中获得同名全局变量的值。
<script> var a=0;//全局 function c(){ console.log(window.a);//获得同名全局变量的值 console.log(window['a']);//获得同名全局变量的值 var a=1;//局部 console.log(a); return a; } c();//0,0,1</script>
-------------------------------------------------分割线----------------------------------------------------- 全局变量优缺点:
优点:可以减少变量的个数,减少由于实参和形参的数据传递带来的时间消耗。
缺点:(1)全局变量保存在静态存储区,程序开始运行时,为其分配内存。程序结束运行时,释放其内存,相比于局部变量的动态分配和释放内存,全局变量的生命周期长,而且当全局变量数目较多时,会占用较大的内存。
(2)使用全局变量会破坏函数的封闭性和独立性。一个函数本来是通过传参和返回值来进行输入输出的,但是用了全局变量之后,该参数就可以不仅只通过原有的参数和返回进行输入输出,这样原有的封闭性就会被破坏。这也是导致函数的可移植性降低。
(3)当一个全局变量多次被不同的语句操作,全局变量的值容易变得不清晰。这便降低了程序的可读性,不利于在编码后进行调试和查错之类的操作。
局部变量的优缺点:
优点:(1)局部变量是程序动态分配内存,所以生命周期短,不会造成长时间占用过多内存的情况。
(2)局部变量定义在函数内部,限于函数内部调用,故能很好的保持函数的封闭性。
(3)即使在多个函数内部定义了多个同名局部变量,它们之间也不会相互影响。
缺点:(1)局部变量中的数据在函数执行完后就会消失,故不利于数据的保留。
(2)局部变量的使用范围有限,仅限于所属函数的内部。
以下示例是对以上理论的综合运用:
<script> var a=0; function v(){ console.log('调用函数时,声明提前:'+a); var a=1;//局部 console.log('调用函数时,未对a进行修改:'+a); ++a; console.log('调用函数时,对a进行修改:'+a); return a; } console.log('调用函数v()之前:'+a); v(); console.log('调用函数v()之后:'+a);/** 函数运行结果依次从上到下 调用函数V()之前:0 调用函数时,声明提前:undefined 调用函数时,未对a进行修改:1 调用函数时,对a进行修改:2 调用函数V()之后:0=》调用的是全局变量a的值 ***/</script>
值得注意的是:函数调用之后,局部变量释放,即使同名于全局变量,也不会对全局变量有任何影响。
<script> var a=0; function v(){ console.log('调用函数时,声明提前:'+a); a=1;//全局 console.log('调用函数时,未对a进行修改:'+a); ++a; console.log('调用函数时,对a进行修改:'+a); //return a; } console.log('调用函数v()之前:'+a); v(); console.log('调用函数v()之后:'+a);/** 函数运行结果依次从上到下 调用函数V()之前:0 调用函数时,声明提前:0 调用函数时,未对a进行修改:1 调用函数时,对a进行修改:2 调用函数V()之后:2 ***/</script>
值得注意的是:a=1为全局变量,即使在函数中,也能找到。同时,函数也会对全局变量进行修改!<script> var a=0; function v(){ console.log('调用函数时,声明提前:'+a); a=1;//全局 b=8; console.log('调用函数时,未对a进行修改:'+a); ++a; console.log('调用函数时,对a进行修改:'+a);// return a; } console.log('调用函数v()之前:'+a);// console.log('调用函数v()之前b:'+b); v(); console.log('调用函数v()之后:'+a); console.log('调用函数v()之后b:'+b);/** 函数运行结果依次从上到下 调用函数V()之前:0 调用函数时,声明提前:0 =》调用的是全局变量a,不存在函数声明提前 调用函数时,未对a进行修改:1 =》函数中对全局变量a=0重新赋值为a=1 调用函数时,对a进行修改:2=》对全局变量进行++a操作后的值 调用函数V()之后:2 =》对全局变量进行++a操作后的值 调用函数v()之后b:8 ***/</script>值得注意的是:语句console.log('调用函数v()之前b:'+b);执行时会报错b is not defined,而在函数调用之后b:8。
这是因为只有当函数调用之后,全局变量b才能有有效的!
1 0
- JavaScipt浅谈——全局变量和局部变量
- C/C++——全局变量、局部变量、静态全局变量和静态局部变量
- javascipt全局和局部变量定义
- 局部变量和全局变量
- 局部变量和全局变量
- 全局变量和局部变量
- 局部变量和全局变量
- 全局变量和局部变量
- 局部变量和全局变量
- 全局变量和局部变量
- 全局变量和局部变量
- 局部变量和全局变量
- 全局变量和局部变量
- 全局变量和局部变量
- 全局变量和局部变量
- 全局变量和局部变量
- 局部变量和全局变量
- 全局变量和局部变量
- Java8:Lamdba表达式与局部变量
- 实验 12 多区域下 OSPF 配置实验
- 数据压缩实验三——霍夫曼编解码算法实现
- poj3318——Matrix Multiplication(随机化算法)
- c语言的%e格式输出符
- JavaScipt浅谈——全局变量和局部变量
- php自学笔记之wampserver3.0.6中mysql密码修改
- ViewPager预加载机制
- ios8以前版本UIViewcontroller不兼容,刷新页面后部分控件不显示
- 【软件安全】PAE下虚拟地址到物理地址的转换
- Android 创建一个私有的数据库(内容提供者)
- Python彩蛋import this
- 简单使用requests库爬取Ip代理
- 六角幻方--详解第五届蓝桥杯大赛Java本科B组决赛真题