JS中的全局变量和局部变量问题

1、程序的运行结果为:100  10  100

1 var a = 10;
2 function test(){
3     a = 100;
4     console.log(a);
5     console.log(this.a);
6     var a;
7     console.log(a);
8 }
9 test();

解析:Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定变量的作用域,所以在函数test执行前,由于第6行声明了局部变量a,所以函数内部的a都指向已经声明的局部变量,所以第4行输出100。第5行输出this.a,我们都知道,函数内部的this指针指向的是函数的调用者,在这里函数test被全局对象调用,所以this指针指向全局对象(这里即window),所以this.a = window.a,一开始生命了全局变量a=10,所以第5行输出结果为10。第7行输出结果为100,因为局部变量a在第3行已经被赋值了100,所以直接输出局部变量a的值。

2、程序的运行结果为:undefined  10

1 var a = 100;
2 function test(){
3     console.log(a);
4     var a = 10;
5     console.log(a);
6 }
7 test();

解析:看了第1个例子,可能有同学会认为输出结果是10  10,但是结果却不是10 10,为什么呢?仔细看第1个例子解析的第一句话,Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),但是不能对变量定义做提前解析,在这个函数中,执行第3行前,可以认为已经声明了变量a,但是并没有定义(这里即赋值),所以第3行输出结果为undefined,执行第4行a =10后,变量a的值就为10,所以第5行输出结果为10。

3、程序的运行结果为:100  10  10

1 var a = 100;
2 function test(){
3     console.log(a);
4     a = 10;
5     console.log(a);
6 }
7 test();
8 console.log(a);

解析:我们知道在函数内部,一般用var声明的为局部变量,没用var声明的一般为全局变量,在test函数内,a=10声明了一个全局变量,所以第3行的a应该输出全局变量的值,而在函数执行之前已经声明过一个全局变量并赋值100,所以这里第上输出100。第4行给全局变量a 重新赋值10,所以全局变量a的值变成10,所以第5行输出10。而在函数test外部,第8行输出全局变量a的值,因为全局变量被重新赋值为10,所以输出结果即为10。

时间: 2024-10-14 04:24:31

JS中的全局变量和局部变量问题的相关文章

js中的全局变量和局部变量

var a = 1; function test(){ alert(a); var a = 2; alert(a); a = 3; } test();//依次alert  1  ,  2 alert(a);  //此处alert3 //方法体内var定义的是局部变量,直接赋值为定义全局变量:

JS中声明全局变量

JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍. 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量.该方式即为显式声明详细如下: 复制代码代码如下: var test = 5;  //全局变量function a(){  var cc=3; //局部变量  alert(test);}function b(){alert(test);} 声明方式二: 没有使用var,直接给标识符test赋值,这样

js中的全局变量

在js中有3中声明全局变量的方式 第一种使用var+变量名,在方法外部声明: 1 var msg; //默认值undefined 2 $(function(){ 3 setmsg(); 4 showmsg(); 5 }) 6 function setmsg(){ 7 msg = "hello world"; 8 } 9 function showmsg(){ 10 alert(msg); 11 } 第二种方式在方法内部声明,但是不使用var关键字: 1 $(function(){ 2

Python中的全局变量与局部变量的区别

全局变量与局部变量两者的本质区别就是在于作用域 用通俗的话来理解的话, 全局变量是在整个py文件中声明,全局范围内都可以访问 局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了 如果在函数内部定义与某个全局变量一样名称的局部变量,就可能会导致意外的效果,可能不是你期望的.因此不建议这样使用,这样会使得程序很不健全 直接来看几个例子来理解全局变量和局部变量的区别吧: Demo1: def fun(x):       y=2       print("乘法

js中,全局变量与直接添加在window属性的区别

在js中定义的全局变量是挂在window下的,而window的属性也一样,那么这两者有什么区别呢? 其实这两者还是有小小的区别的,全局变量是不能通过delete操作符删除的,而直接定义在window上的属性是可以删除的. 那么为什么全局变量不能删除呢? 因为全局变量也是个对象,这个对象时通过叫做PropertyDescriptor来定义的. 可以在浏览器中调用Object.getOwnPropertyDescriptor(对象, 属性)来查看 举例: var test = 2; window.t

总结javascript中的全局变量和局部变量的区别以及声明函数和调用函数的区别

<!DOCTYPE html> <html> <head lang="en"> <meta charset="utf-8"/> <title></title> <script src="../js/jquery-1.10.2.js"></script> <script> // 1 i为全局变量 输出全局变量 function myName(

C语言中的全局变量和局部变量

1.通过两张图说明 (1)全局变量 运行成功 (2)局部变量 运行失败 大家都知道,重复在main函数中定义变量会报错 但为什么上面定义不报错呢? 得出结论: (1)全局变量定义和声明有区别 (2)局部变量定义和声明没有区别 说明: 例如  int  a   :是定义  ,而 int  a = 1 是赋值! 看看函数吧! 成功了,成功验证了! 看看全局变量吧! 成功验证了!

js中的全局变量和函数是作为window对象的属性和方法而存在

在全局作用域声明的变量和函数是作为window对象的属性和方法而存在的. 总结: 所以可以通过给window对象添加属性和方法,也可以创建全局变量和函数. 原文地址:http://blog.51cto.com/11871779/2121756

swift中的全局变量和局部变量

http://www.tuicool.com/articles/vQB3my