上級作用域
函數在哪兒定義的,它的上級作用域就是誰(和函數在哪兒執行沒有關係)
我們來看一段代碼和執行圖示
var num = 12;
function fn() {
var num = 120;
return function() {
consoloe.log(num);
};
}
var f = fn();
f();
(function () {
var num =1200;
f();
})()
白話
1、return 返回的東西,不進行預解釋(return後邊的代碼不進行預解釋,但是return下邊的代碼進行預解釋)
2、圖是仿別人畫的,本人對作用域的理解也很欠缺,圖看起來並沒有明確展示作用域鏈,但是對代碼的執行過程詮釋的還可以。
3、作用域淺理解(僅供參考,不一定正確):保存函數靜態代碼的堆內存首次開闢的時候,它的地址首次保存在存放那個函數的堆內存中 (不包含普通對象,普通對象沒有作用域),那個函數就是它的上級作用域。