//闭包
function test(){
var arr=[];
for(var i=0;i<10;i++){
//执行十次立即执行函数(function(j){}(i))
//第一个i=0传给j,但是此时function(){}函数体任然不被执行,但是执行上下文占用立即执行函数的空间,站在立即执行函数function(j)的肩膀上的,放到数组中等着,直到循环执行完。当myArr()执行的时候,每一个函数体function(){}才开始执行
//函数体查找自己的执行期上下文作用域,此时每一个当前的函数体都指向了自己当前的立即执行函数的作用域,形参和实参赋值对应
(function(j){
arr[j]=function(){
document.write(j+" ");
}//此函数体也不马上执行,只是一个地址引用相当于声明
}(i));//i传实参
// (function(j){
// arr[j]=function(){
// document.write(j+" ");
// }//此函数体也不马上执行
// }(0));
// (function(j){
// arr[j]=function(){
// document.write(j+" ");
// }//此函数体也不马上执行
// }(1));
//......// (function(j){
// arr[j]=function(){
// document.write(j+" ");
// }//此函数体也不马上执行
// }(9));
}
return arr;
}
var myArr=test();
for(var j=0;j<10;j++){
myArr[j]();
}
立即执行函数,闭包 懂啦
最新推荐文章于 2022-11-13 20:39:40 发布