我有以下代碼:使用Javascript - return語句誤解
function a(){
b();
return undefined;
}
function b(){
c = function(){ };
return c;
}
a();
console.log(c); //Why can we see it?
我會告訴你我是怎麼看這或多或少,並請糾正我在哪裏我錯了:
第一個被執行,並創建一個新的執行上下文。當a的執行正在處理時,它也執行b函數,所以有 一個新的執行上下文被創建。
b的執行上下文返回c,這是一個函數,返回到執行上下文。 現在b的執行上下文結束,執行堆棧返回a, ,它看到:「return undefined」。
那麼,現在a的執行上下文正在返回undefined返回給調用者。現在我不明白,c函數是如何存在的(你可以通過console.log(c);)來看到它,以及更多,爲什麼它附加到窗口對象? 爲了我的理解(我知道這是錯誤的),一旦執行上下文結束,它應該被垃圾收集 ,因爲它保存了c的函數引用。
return語句似乎有不可思議的規則,我想澄清一下。感謝您的時間。
您已聲明'c'在全局範圍內。它不受'b()'限制 –