- 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)