(图1)
js 作用域链

JS权威指南指出”JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里.” 
从这个例子里边可以明白这句话

上边例子输出:fun_1:undefined fun_2:1

fun_2 是1 就证明了 “函数是运行在定义的作用域中的”,fun_2 被定义的时候,上一层是全局变量arg(arg 是1 ,并不是fun_1里边声明的2)
当调用的时候,先调用fun_1
fun_1 里边:先定义了 一个 自己的arg,arg在fun_1里边变量提升,先声明,然后打印输出,再赋值的,所以导致在fun_1 里边输出为undefined 如果是以下例子(图2),则是直接查找上一级的arg
例子(图2):

js 作用域链
继续讨论图1:
当调用fun_2的时候,fun_2定义的时候的作用域里边是没有局部x的(说法可能不严谨),而且与fun_1里边的arg 没有关联(因为JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里),所以向上一级查找arg 得到1

以上为自己感悟,如有错误,请大家指正

以下是看到另外大神的例子,当时我答错了,特此写上(希望下次不要错)
js 作用域链

相关文章:

  • 2021-11-23
  • 2021-11-23
  • 2021-09-03
  • 2021-09-20
  • 2021-04-15
  • 2021-11-23
  • 2020-05-01
  • 2021-03-31
猜你喜欢
  • 2021-04-29
  • 2021-05-13
  • 2021-08-02
  • 2020-07-29
  • 2021-10-26
  • 2021-11-23
相关资源
相似解决方案