博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
局部变量与全局变量
阅读量:6229 次
发布时间:2019-06-21

本文共 1202 字,大约阅读时间需要 4 分钟。

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

转载于:https://www.cnblogs.com/railgun/p/10125449.html

你可能感兴趣的文章
Mysql数据库安装---解压版
查看>>
在多文档应用程序中使用OpenGL绘图
查看>>
【转】HTTP状态码(HTTP Status Code)
查看>>
在Eclipse下搭建Android开发环境教程,HelloWord
查看>>
python自动化测试——设置元素等待
查看>>
Ubuntu下使用SVN
查看>>
shutdown与startup命令
查看>>
swift -- 计步器CMPedometer的使用
查看>>
zTree的重点
查看>>
Java 文件读写操作
查看>>
BDFL
查看>>
poj1411
查看>>
java中的throw与throws的区别
查看>>
Error: Password file read access must be restricted: /etc/cassandra/jmxremote.password
查看>>
常用的垃圾回收算法
查看>>
DP ZOJ 3872 Beauty of Array
查看>>
SSH整合报错:找不到元素 'beans' 的声明
查看>>
Spring 依赖注入方式详解
查看>>
工作流引擎资料/产品收集
查看>>
通过串口连接控制树莓派
查看>>