局部变量与全局变量实例,需要自己复制,再在浏览器实验,体验总结。说多可能记不住,自己实际操作了记忆深刻。
下面给出实验例子:
<!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.局部变量定义在方法体类,外调方法不会影响其值,形成闭包。