zoukankan      html  css  js  c++  java
  • 闭包

    闭包:函数对象可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域内,这种特性在计算机科学文献中称为“闭包”。
     
    通俗解释:主体函数中嵌套一个函数,将嵌套函数返回到主体函数之外,利用返回的嵌套函数访问主体函数中的局部变量。
    代码解释:
    示例1
    function checkscope() {
    var scope = 'local scope';
    function f() {
    return scope;
    }
    return f();
    }
    // 返回checkscope()函数内部的 f 函数的调用结果,即返回局部变量scope
    checkscope(); // 返回 'local scope'
    示例2
    function checkscope() {
    var scope = 'local scope';
    function f() {
    return scope;
    }
    return f;
    }
    // 返回checkscope()函数内部的f函数对象,f的调用结果,即返回局部变量scope
    checkscope()(); // 返回 'local scope'
    上面两个简单示例展示如何应用函数内部局部变量(闭包),也可以在主体函数中返回多个函数(用对象),不同函数用不同的方式操作局部变量。
     
     
    创建多个闭包时,容易产生的错误
    function constfuncs() {
    var funcs = [];
    for(var i=0; i<10; i++) {
    funcs[i] = function() {
    return i;
    }
    }
    return funcs;
    }
    var funcs = constfuncs();
    funcs[5](); // 返回值是什么?
     
    1、函数中变量 i 的值:constfuncs()函数调用结束,i 最后的值为10;
    2、funcs 数组中的值:constfuncs()函数调用时,内部创建了10个函数 function() { return i ; },这10个函数没有执行,只是存储到数组中,下标 0 - 9;
    3、funcs[5]() 返回值:funcs[5] 是创建的10个函数中的一个,调用时返回 i,此时constfuncs()函数运行结束,i 值为10,所以funcs[5]() 返回值 是10;
     
  • 相关阅读:
    CentOS下添加sudo用户
    CentOS查看你是否有USB 3.0端口
    CentOS查看操作系统信息(重要)
    JStack分析cpu消耗过高问题
    Java内存管理和垃圾回收
    kafka学习之-深入研究原理
    kafka学习之-文件存储机制
    kafka学习之-配置详解
    Hbase学习之javaApI封装
    linux中top命令
  • 原文地址:https://www.cnblogs.com/unlockth/p/7068030.html
Copyright © 2011-2022 走看看