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