JavaSript中变量的作用域 闭包的理解

来源:互联网 发布:咋找数据 编辑:程序博客网 时间:2024/05/22 05:10
<!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>

0 0
原创粉丝点击