《JavaScript面向对象编程》函数

闭包


JS只有函数作用域,函数外为全局变量,函数内为局部变量
绿圆是函数fn的作用域,在这范围内可访问变量b和局部变量a,橙圆是fn内部函数inner的作用域,此范围内可访问自身作用域内的变量c,也可访问父级作用域的变量b,这就形成了一条作用域链
全局空间(蓝圆)为0级作用域,绿圆是1级作用域,橙圆为2级作用域,依次类推
橙圈可访问绿圈或蓝圈内的数据,但蓝圈内访问不了绿圈,绿圈访问不了橙圈,也就是可以一路由内向外访问,但由外到内却不行

若把橙圈拿到绿圈外,蓝圈内的位置,就形成了闭包

现在橙圈也就是函数inner和变量a一样,都是在全局作用域中,并且inner还记得它被定义时所设定的环境,因此它依旧可访问绿圈也就是函数fn的作用域并使用变量b
突破作用域链的途径,升级为全局变量传递(返回)给全局作用域即可


闭包#1

猜你喜欢

转载自www.cnblogs.com/Grani/p/10514102.html