函数作用域链-记一个第一眼蒙逼的问题

 IIFE-函数入参

 

首先,let a = 20 是在全局作用域下定义的,而let a = 30 是在一个IIFE的函数作用域里定义的,当IIFE执行时,fn作为函数参数传入,此时f()执行到console.log(a)时,会在创建此调用函数的作用域下查找a,如果未查找到就是defined。
关于函数作用域链的步骤总结下:
  1、 处于全局作用域下,没有就是defined。
  2、非全局作用域下,处于函数作用域下,函数调用则取创建该函数的作用域为当前作用域
  3、非全局作用域下,处于函数作用域下,函数体内,先从函数作用域内查找,有则结束查找,无则继续查找,直到查找到全局作用域。

posted @ 2018-07-26 15:26  乐乐学长  阅读(128)  评论(0编辑  收藏  举报