js中全局变量与局部变量实例、闭包

来源:互联网 发布:吴梅村 红楼梦 知乎 编辑:程序博客网 时间:2024/05/21 17:03

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

下面给出实验例子:

<!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" onclick="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.局部变量定义在方法体类,外调方法不会影响其值,形成闭包。