• 函数作用域和闭包


    闭包是函数和上下文环境的合体

    const a = {}
    let type = 'directive'
    a[type] = function () {
        console.log(type)
    }
    type = 'component'
    
    // 在运行的时刻,type的值为'component'
    a.directive() // component
    a.directive() // component
    

    通常,闭包内部会存在一个“自由变量”,这个变量是在外部作用域定义的,当外部作用域的变量值发生变化,闭包内的“自由变量”也就相应变化。

    所以,闭包是函数和上下文环境的合体,通常也称之为“开放函数”,因为实际运行结果部分取决于运行时“自由变量”的取值。

    函数作用域下的闭包

    const a = {}
    const assets = ['directive', 'component']
    assets.forEach((type) => {
        a[type] = function () {
            console.log(type)
        }
    })
    a.directive() // directive 这里为什么不是 component ?
    a.component() // component
    

    但是,要注意“自由变量”的定义作用域。如果“自由变量”定义在函数作用域内,那么同一个函数被多次调用所返回的多个闭包他们所携带的上下文环境相互独立。

    这是因为在Javascript中函数作用域是互相隔绝的,所以“自由变量”的引用也是互相隔绝的。

  • 相关阅读:
    hdu 1686 Oulipo
    [NOI1997] 积木游戏
    错误录——未完待续
    NOI 2014 魔法森林
    hdu 4010 Query on The Trees
    求助大佬6——1种贪心
    51 nod 1205 流水线调度
    bzoj 1180: [CROATIAN2009]OTOCI
    HNOI2010 弹飞绵羊
    SDOI2008 洞穴勘测
  • 原文地址:https://www.cnblogs.com/Peter2014/p/12096217.html
Copyright © 2020-2023  润新知