第167题 闭包读代码题输出

    // 函数作为返回值
    function create() {
      const a = 100
      return function () {
        console.log(a)
      }
    }
    
    const fn = create()
    const a = 200
    fn() // 输出什么?
    
    // 函数作为参数被传递
    function print(fn) {
      const a = 200
      fn()
    }
    const a = 100
    function fn() {
      console.log(a)
    }
    print(fn) //输出什么?
```**答案**

答案:`100``100`

  * 所有的自由变量的查找,是在函数定义的地方,向上级作用域查找
  * 不是在执行的地方!

**闭包的应用:隐藏数据不被外界访问**
```js
    // 闭包隐藏数据,只提供 API
    function createCache() {
      const data = {} // 闭包中的数据,被隐藏,不被外界访问
      return {
        set: function (key, val) {
          data[key] = val
        },
        get: function (key) {
          return data[key]
        }
      }
    }
    
    const c = createCache()
    c.set('a', 100)
    console.log( c.get('a') )
Last Updated:
Contributors: leeguooooo