上级作用域的查找
只需查看当前函数在哪个作用域下定义的,那此作用域为当前函数的上级作用域,与当前函数在哪里执行无关。
示例:
var num = 15;//预解释,全局作用域中声明 num
function fn(){
var num = 150;//fn()预解释,函数私有作用域中声明 num
return function(){//return 之后不进行预解释
console.log(num);
/*调用变量num的值,当前匿名函数无num变量,查找当前函数作用域的上级作用域的num变量,
*匿名函数是在fn()的私有作用域下定义的,故fn()私有作用域为匿名函数的上级作用域,
*因此fn()私有作用域的num变量是匿名函数引用的变量。
*/
};
}
var f = fn();//预解释,声明变量f,将fn()引用地址赋值给f
f();//在全局作用域下执行f(),输出150
~function(){
var num = 1500;
f();//在自执行函数下执行函数f(),输出150
}();