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

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

(1)回调函数jsp

 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;spa

(2)闭包code

 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;blog

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

相关文章
相关标签/搜索