• 再看函数的闭包


     1 function createFunctions(){
     2 
     3         var result = [];
     4 
     5         for(var i = 0; i < 10; i++){
     6             result[i] = function(){
     7                 return i;
     8             };
     9             console.log(i);
    10         }
    11         console.log("最终i : ", i);
    12 
    13         //return result;
    14         console.log(result[0]());// 10
    15         console.log(result[1]());// 10
    16         console.log(result[2]());// 10
    17         console.log(result[3]());// 10
    18         console.log(result[4]());// 10
    19         console.log(result[5]());// 10
    20         console.log(result[6]());// 10
    21         console.log(result[7]());// 10
    22         console.log(result[8]());// 10
    23         console.log(result[9]());// 10
    24         console.log(result[10]);// undefined
    25     }
    26 
    27     createFunctions();

    内存中仅保存全局作用域,但是闭包的情况有所不同!

    我们知道,函数在执行结束之后局部变量就会被回收,(全局作用域,本地活动对象)。以上为例,最终的i值没有被销毁,为 10. 所以result 中引用的i 一直是 10。

    但是通过改写:

     1 function createFunctions(){
     2 
     3         var result = [];
     4 
     5         for(var i = 0; i < 10; i++){
     6             result[i] = (function(num){
     7                 return function(){
     8                     return num;
     9                 };
    10             })(i);
    11             console.log(i);
    12         }
    13         console.log("最终i : ", i);// 10
    14 
    15         //return result;
    16         console.log(result[0]());// 0
    17         console.log(result[1]());// 1
    18         console.log(result[2]());// 2
    19         console.log(result[3]());// 3
    20         console.log(result[4]());// 4
    21         console.log(result[5]());// 5
    22         console.log(result[6]());// 6
    23         console.log(result[7]());// 7
    24         console.log(result[8]());// 8
    25         console.log(result[9]());// 9
    26         console.log(result[10]);// undefined
    27     }
    28     createFunctions();

    上面代码相当于:

     1 function createFunctions(){
     2 
     3         var result = [];
     4 
     5         for(var i = 0; i < 10; i++){
     6             result[i] = (function(num){
     7                 num = i;
     8                 return function(){
     9                     return num;
    10                 };
    11             })();
    12             console.log(i);
    13         }
    14         console.log("最终i : ", i);// 10
    15 
    16         //return result;
    17         console.log(result[0]());// 0
    18         console.log(result[1]());// 1
    19         console.log(result[2]());// 2
    20         console.log(result[3]());// 3
    21         console.log(result[4]());// 4
    22         console.log(result[5]());// 5
    23         console.log(result[6]());// 6
    24         console.log(result[7]());// 7
    25         console.log(result[8]());// 8
    26         console.log(result[9]());// 9
    27         console.log(result[10]);// undefined
    28     }
    29     createFunctions();
  • 相关阅读:
    如何选择创业项目:四项原则与四个步骤
    做管理人要注意的十一点细节
    成功激励格言精选
    将自己的姿态放低:你应具备赚钱以外的四种能力
    让我的爱带给你最大的幸福和感动
    秋收情不收.七夕感怀
    成功人士的十五条座右铭
    足迹
    人生成功的生活经典治理名言
    真正的贵人就是你自己
  • 原文地址:https://www.cnblogs.com/chuyu/p/3370460.html
Copyright © 2020-2023  润新知