JavaSript中变量的作用域 闭包的理解
2014-05-10 01:12
459 查看
<!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中变量的作用域闭包的深入理解
- 深入理解JavaScript作用域、变量对象、闭包
- JavaScript闭包理解【关键字:普通函数、变量访问作用域、闭包、解决获取元素标签索引】
- javascript理解之变量作用域与闭包
- [置顶] javascript理解之变量作用域与闭包
- JavaScript 变量作用域及闭包
- 变量的作用域--js闭包
- 深入理解javascript原型和闭包(18)——补充:上下文环境和作用域的关系
- python的闭包与变量作用域
- 深入理解PHP原理之变量作用域(Scope in PHP)
- 深入理解JavaScript的变量作用域
- 深入理解JS中的变量作用域
- 自动、强制类型转换 | 变量作用域 | java初学笔记 新手理解
- 深入理解PHP原理之变量作用域(Scope in PHP)
- 深入理解JavaScript的变量作用域
- 深入理解javascript作用域和闭包
- 深入理解Javascript作用域与变量提升
- 对JS变量作用域的通俗理解
- 深入理解javascript原型和闭包(16)——补充:上下文环境和作用域的关系
- 深入理解JS变量作用域