<div class="codetitle"> <span><a style="CURSOR: pointer" data="61513" class="copybut" id="copybut61513" onclick="doCopy('code61513')"><u>复制代码</u></a></span> 代码如下:</div> <div class="codebody" id="code61513"> <br> <br> <br> <br><meta charset="UTF-8"> <br><title>Insert title here</title> <br><script type="text/javascript"> <BR>/* <BR>* 1.js中的变量都是公用的. <BR>2.js中没有静态变量 <BR>3.闭包:函数内部可以调用函数外部的变量;反之,则不行 <BR>*/ <br><br>var r=10; <BR>function test1(){ <BR>var r2="abc"; <BR>//alert(r) <BR>} <BR>//alert(r2);//不能访问的函数内部的r2 <BR>test1(); <BR>//嵌套的函数中也ok啦 <BR>function test2(num1){ <BR>function test3(num2,num3){ <BR>return num2+num3+num1; <BR>} <BR>return test3(10,20) <BR>} <BR>//alert(test2(30)); <BR>//---------循环中的闭包------------------------ <BR>function testfun(){ <BR>var r=1; <BR>var arr=[]; <BR>for(var x=0;x<3;x++){ <BR>r++; <BR>arr[x]=function(){ <BR>return r; <BR>} <BR>} <BR>return arr; <BR>} <BR>alert("testfun:"+testfun()); <BR>var arr2=testfun(); <BR>alert("arr:"+arr2[0]); <BR>alert("arr:"+arr2[1]()); <BR>alert("arr:"+arr2[2]()); <BR>//==========以上三个弹出框的结果都是4========== <BR>/*分析原因: <BR>理解一下在JavaScript中函数是什么? <BR>函数就是一段可执行的代码块,函数也是可以用一个变量表示,比如函数的第二种定义方式 <BR>var add=new Function("a","return a+10");底层的本质就是这个函数名指向 <BR>了这一段为变量而创建的可执行的代码。 <BR>* 首先当testfun函数执行完毕以后,arr[0],arr[1],arr[]中都是存储了相同的 <BR>可执行代码块function(){ <BR>return r <BR>}也就是说上面三个是函数变量而已,要执行它们只需要在变量名称后面加()就ok了 <BR>而且这个时候r的值4 <BR>当执行arr[0]()相当于执行了这个代码块中的代码。 <BR>所以最终的结果return r,当然返回4了。 <BR>*/ <br><br></script> <br> <br> <br><br> <br> <br> </div>