多层函数调用取变量时,无论在哪里调用,要到创建此函数的作用域中取值,如果找不到再往上一级,直到全局变量。
- 外面定义了很多的全局的变量,下面我们来一个个理一下。
- 定义三个变量a,b,c;将A1函数赋值给变量f, f()执行。
- f函数执行其实就是A1函数执行,我们来看A1函数里也定义了a,b,c三个变量,并且此函数A1返回的是B1函数.
- 那么执行B1函数,B1函数中定义变量b=5,这个B1函数又返回个匿名函数,你可以看下函数体,里面取a,b,c三个变量之和,所以我们一个个确定这个三个参数值。
- 第一步,这个返回函数里没有定义变量,,
- 第二步,继续往上一级找,找到b=5,但是a,c都没有找到
- 第三步,继续往上找a=3,c=4,全找到
- 所以a=3,b=5,c=4;
总结:函数里的变量没有的话要往创建这个函数的作用域里去找,如果找到则停止,反之直到找到全局作用域中。