执行函数在执行前预编译时,还会生成AO。 利用此特性可以保存循环中的变量,以便在循环结束后可以使用该变量。
案例:
要求:创建长度为10的数组并保存10个函数。 这些函数的功能在控制台上按0、2 .9的顺序输出。
思路:使用for循环向数组添加函数
原理:闭包可以封装变量
错误格式:
script type=' text/JavaScript ' function test () {var arr=[]; for(varI=0; i 10; I () {arr[i]=function ) ) console.log ) I; }}return arr; }var myArr=test (; myArr[0] (; myArr[1] (; myArr[2] (; myArr[3] (; myArr[4] (; /script这样写数组内的函数和test形成闭包,输出结果是5个10。 由于test函数的执行结束,I的值为10,调用myArr[0]时将显示console.log(I ); 的I值为10,其他也为10
正确的写法:
script type=' text/JavaScript ' function test () {var arr=[]; for(varI=0; i 10; I ) ) (function(j ) ) {arr[j]=function ) ) console.log ) j; }(I ) }返回arr; }var myArr=test (; myArr[0] (; myArr[1] (; myArr[2] (; myArr[3] (; myArr[4] (; 每个/script即时执行函数都有一个独立的AO,调用myArr[0]和myArr[5]进行访问的j位于不同的AO中,如下图所示