码迷,mamicode.com
首页 > Web开发 > 详细

jsp关于函数作用域之回调函数和闭包

时间:2020-01-11 20:34:34      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:var   color   输出   关于   地方   作用域   size   ons   注销   

要点:在js中函数自身的作用域在声明的地方不在调用的地方

(1)回调函数

 1 var a = 1;
 2 function f1(f2){
 3     var a = 2;
 4     f2()  
 5 }
 6 
 7 function f2(){
 8     console.log(a);      
 9 }
10 
11 f1(f2);

控制台输出的是1;

因为f1(f2)里面的f2是一个值,在f1里面的f2()执行的时候 会在f1里面寻找有没有f2,没有,那就会在全局作用域里面去找f2,那么执行的时候就是在全局作用域里面执行,那就意味着f2里面的a是全局作用域里面的a,也就是1;

(2)闭包

 1 var a = 1;
 2 
 3 function f1(){
 4     var a = 2;
 5     function f2(){
 6         console.log(++a);  
 7     }
 8     return f2;
 9 }
10 
11 var f = f1();
12 f();
13 f();
14 f();
15 f();

控制台输出的是3,4,5,6;

因为在jsp的解释器中,当var f = f1()时;一般情况下,当f1()执行到return的时候 证明函数已近运行结束,会销毁局部变量a,但是f1()返回的是f2函数,为了防止f2在调用的时候有可能会使用到f1里面的局部变量,这时,jsp解释器会将f1里面的局部变量保留下来,以防万一,所以在执行过一次f()后a里面的值会变成3且没有注销。才会输出3,4,5,6;

jsp关于函数作用域之回调函数和闭包

标签:var   color   输出   关于   地方   作用域   size   ons   注销   

原文地址:https://www.cnblogs.com/liangqian/p/12180762.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!