先上一小段代码:
1 function outFun(){ 2 var num = 2; 3 function inFun(){ 4 console.log(num); 5 } 6 return inFun; 7 } 8 var out = outFun(); 9 out();//2,这里能够访问,其实是把num这个变量往上面一层提升了一下,out()往里面执行了一层。刚刚好在同一层。 10 console.log(num);//浏览器报错,不能访问outFun函数里面的局部变量num
敲黑板,说概念,通俗的说:闭包就是有权访问另外一个函数作用域变量的函数。
再说一个变量提升的概念吧;
1 var scope="global"; 2 function scopeTest() { 3 console.log(scope); 4 var scope="local"; 5 } 6 scopeTest(); //undefined
相当于下面的代码:
var scope="global"; function scopeTest() { var scope; //但是如果没写var ,scope就是全局变量,不是局部变量了。 console.log(scope); scope="local"; } scopeTest(); //undefined
原文链接:http://www.cduyzh.com/js-closure/
时间: 2024-10-01 07:44:46