Closures

作用域和闭包

  • this的不用应用场景如何取值
  • 手写bind函数
  • 闭包在实际开发中的应用场景
  • 创建10个a标签,点击时候弹出来对应的序号

作用域:某个变量合法的使用范围,上图中a可以在最外层的红框里使用

  • 全局作用域
  • 函数作用域
  • 块级作用域

自由变量

一个变量在当前作用域没有定义,但被使用了
向上级作用域,一层一层依次寻找,直到找到为止
如果全局作用域都没有找到,则报错xx is not defined

闭包
作用域应用的特殊情况,有两种表现

  • 函数作为参赛被传递
  • 函数作为返回值被返回
    //函数作为返回值
function create(){
    let a = 100
    return function(){
        console.log(a)
    }
}
let fn = create()
let a =200
fn() // 100


        function print(){
            const a = 200
            fn()
        }
        const a = 100
        function fn(){
            console.log(a)
        }
        print(fn)//100

闭包:自由变量的查找是在函数定义的地方向上级作用域查找,不是在执行的地方