Closure in JavaScript

mac2022-06-30  84

JavaScript中的函数:       1.可以作为返回值, 参数或变量的值.       2.可以嵌套定义.       3.函数内部能引用外部变量(嵌套作用域). 这样就存在一个问题, 函数定义时(即实例化Function)的作用域链与函数执行时的作用域链可能不同. 闭包就是用来解决这个问题: 创建函数实际上是将引用环境和函数代码打包成一个可执行实体. Code: var  test  =   function (i){     var  funArray  =   new  Array();     for  ( var  j = 0 ; j < i; j ++ )    {        funArray[j]  =   function (){            alert(j);        }    }     return  funArray;} var  dummy  =  test( 3 );dummy[ 0 ]();  //  输出3 dummy[ 1 ]();  //  也是输出3 dummy[ 2 ]();  //  也是输出3

虽然创建3个(互相独立的)闭包时 j 的值都不同, 但是打包的是同一个上下文, 因此输出是一样的.Code:

function  test(){     var  i  =   1 ;     var  tmp1  =   function (){        alert( ++ i);    }     var  tmp2  =   function (){        alert( ++ i);    }    tmp1();  // 2     tmp2();  // 3      return  [tmp1, tmp2];} var  arr  =  test();arr[ 0 ]();  // 4 arr[ 1 ]();  // 5

闭包对外部变量的改变能反映到定义时的上下文, 并且能延长上下文中"正常"状况下会消失的作用域的生命期

转载于:https://www.cnblogs.com/FlyingCat/archive/2009/09/17/closure_in_javascript.html

最新回复(0)