局部变量与全局变量实例,需要自己复制,再在浏览器实验,体验总结。说多可能记不住,自己实际操作了记忆深刻。

下面给出实验例子:

<!doctype html>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>测试页面</title>
  <script type="text/javascript" src="jquery.js"></script>
 </head>
 <body>
<input type="button" value="click me" οnclick="q();d();q();" />
 

<script>
//var t="tt";
$(document).ready(function(){
	q();
console.log("3:"+t);
var t="t0";
//console.log("1:"+t);
d();
console.log("2:"+t);
q();
console.log("3:"+t);
})

$().ready(function(){
	

})

$(function(){
	
})
function a(){
	t="a";
	console.log("a()的t:"+t);
}
function s(){
	t="s";
	console.log("s()的t:"+t);
}
function d(){
	t="d";
	a();
console.log("d()的t:"+t);
}
function q(){
	var t="q";
	s();
	console.log("q()的t:"+t);
}

</script>
 </body>
</html>

结果:

(1)当注释掉全局变量定义的var t="tt";

(后半部分是由点击“click me”按钮显示的)

(2)当取消注释var t="tt";进行全局变量定义时:

(后半部分是由点击“click me”按钮显示的)

(3)在(2)的基础上再打开$(document).ready(function(){}中的var a="t0";注释:


分析总结:

1.全局变量定义定义在script标签内,所有方法外,一般习惯定义在<script>内第一行,所有方法共享这一变量,都可以改变这一变量。如上例中的var t="tt";

2.局部变量定义在方法实体内,如q()中的var t="q"; ,只对q()方法内有效,形成闭包,连外调的s()方法都不能改变其值,并且全局变量定义var t="tt";也不能改变其值,此时的s()改变的是全局变量的值而不是q()的局部变量值,q()改变的是内部的局部变量的值,不改变全局变量的值。

3.当var t定义在$(document).ready(function(){}中,即加载页面就定义了,和局部变量一样,外调的方法只改变全局里的值,不改变局部变量值;(3)的结果和在(3)的基础上再注掉全局变量定义的var t="tt";的结果一样。

4.所以对比得出,全局变量即全局变量定义在script标签内其他所有方法外,建议定义在script标签的下一行(开头)

5.局部变量定义在方法体类,外调方法不会影响其值,形成闭包。





本文转载:CSDN博客