(图1)
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):
继续讨论图1:
当调用fun_2的时候,fun_2定义的时候的作用域里边是没有局部x的(说法可能不严谨),而且与fun_1里边的arg 没有关联(因为JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里),所以向上一级查找arg 得到1
以上为自己感悟,如有错误,请大家指正
以下是看到另外大神的例子,当时我答错了,特此写上(希望下次不要错)