当前位置:首页 > Web开发 > 正文

在f1里面的f2()执行的时候 会在f1里面寻找有没有f2

2024-03-31 Web开发

要点:在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关于函数感化域之回调函数和闭包

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31784.html