帮助理解
// for(var i = 0;i <10; i++){
//console.log(i);
// }
// console.log(i)//for循环执行完10
例子
// function test() {
// var arr = [];
// for(var i = 0;i < 10; i++) {
// arr[i] = function (){//把函数引用赋给数组的当前位arr[i]=函数,数组当前位需要马上执行出来,和函数体里面的内容无关,
// 函数体不是马上执行,等到 myArr[j]();的时候才会执行,i已经变成10了,共用一个执行期上下文
//
document.write(i +" ");
// }
// }
// return arr;
// }
// var myArr = test();//myArr就是arr
// for(var j = 0;j <10; j++) {
// myArr[j]();
// }
例子1
// function test() {
// var arr = [];//定义一个空数组,[]有10个函数
// for(var i = 0;i < 10; i++) {//----------------------for循环往数组里面添数据,每一个数据就是一个function
// arr[i] = function (){//----访问同一个i-----------把函数放arr[i]里面去,即arr[i]=函数 ,但是只能定义成函数引用,不读函数里面写的啥,
// // -----------------------------------------for循环结束以后i就变成10了,10个函数共用1个test执行期上下文1个闭包),执行位置不在定义位置
// document.write(i +" ");//---------------------
// }
// }
// return arr;//-------把arr返回外面,i=10的时候结束循环
// }
// var myArr = test();
// for(var j = 0;j <10; j++) {//10个函数
// myArr[j]();//在这执行10个10------在这才执行document.write(i +" ");
// }
例子2 打印0123456789,立即执行函数
// function test() {
// var arr = [];
// for(var i = 0;i < 10; i++) {
// (function (j){//形参
// arr[j] = function() {// arr[]i执行语句,=后面的是定义语句
// document.write(j + "");//function() {document.write(j + "");}一坨仍然是不执行的
// }
// }(i))//立即执行,传参i=0,i=1......i=9
// }
// return arr;
// }
// var myArr = test();
// for(var j = 0;j <10; j++) {
// myArr[j]();
// }
函数互相嵌套,把里面的函数保存到了全局,生成闭包,里面的函数在外面执行的时候,会调用得了原来函数里面的变量
例1
// function test() {
// var temp = 100;
// function a() {
// console.log(temp);
// }
// return a;
// }
// var demo = test();
// demo();
例1变形
// var demo;
// function test() {
// var abc = 100;
// function a() {
// console.log(abc);
// }
// demo = a;
// }
// test();
// demo();