js-08闭包、作用域

77 阅读1分钟
  • 1、作用域链、作用域scope、词法作用域、静态作用域、动态作用域
    • 首先什么是作用域?作用域是在运行代码中的某些特定部分中变量,函数和对象的可访问性。也就是作用域决定了代码区块中变量和其它资源的可见性。\
    • 在es6之前,只有全局作用域和函数作用域。es6增加了块级作用域。\
    • 作用域是分层的,内层作用域可以访问外层作用域中的变量,反之则不行。\
    • 而当在函数内部去访问一个变量时,当前作用域中不存在,则会向上层作用域去寻找,若没有再向上层去寻找,直到找到全局作用域还是没有找到,则宣布放弃。这种一层一层的关系,就是作用域链
  • 2、闭包
    • 概念:闭包是指有权访问另一个函数作用域中变量的函数,内部的函数存在外部作用域的引用就会导致闭包。
    • 应用场景:
      • 私有作用域
      • IIFE(立即执行函数)是英文Immediately-invoked function expression的缩写
      • 循环赋值
      • 单例
      • 科里化
      • 惰性函数、柯里化函数、compose函数。
      • 计算缓存
     // 考察隐式转换会调用toString方法、闭包
       var a = {
         num: 1,
         toString: function () {
         return this.num++
      }   
      console.log(a == 1 && a == 2)