查找上级作用域就是看当前函数在哪个作用域下定义的,那么它的上级作用域就是谁,上级作用域和函数在哪里执行没有关系。
例子分析:
</script>
<script type="text/javascript">
var num=12;
function fn() {
var num=120;
return function () {
console.log(num);
}
}
var f=fn();
f(); //-------->输出120
~function () {
var num = 1200;
f(); //-------->输出120
}();
</script>
运行结果:
var f = fn()就是把函数fn的运行返回结果赋值给f,fn函数返回的是一个函数,该返回函数的上级作用域为函数fn
的私有作用域,所以运行f函数console.log(num),num不是f私有作用域的私有变量,需要在上级作用域找,fn的私有作用域含有变量
num,所以都输出的num为120。
分析图: