我已經閱讀了關於閉包和JavaScript上的很多問題,但是我無法找到有關函數在閉合時會發生什麼的信息。通常,這些示例是字符串文本或簡單對象。看下面的例子。當您關閉某個功能時,即使您稍後再進行更改,原始功能也會保留。將JavaScript函數作爲變量關閉時會發生什麼?
什麼在技術上發生在封閉保存的功能?它如何存儲在內存中?它是如何保存的?
請看下面的代碼爲例:
var makeFunc = function() {
var fn = document.getElementById; //Preserving this, I will change it later
function getOriginal() {
return fn; //Closure it in
}
return getOriginal;
};
var myFunc = makeFunc();
var oldGetElementById = myFunc(); //Get my preserved function
document.getElementById = function() { //Change the original function
return "foo"
};
console.log(oldGetElementById.call(document, "myDiv")); //Calls the original!
console.log(document.getElementById("myDiv")); //Returns "foo"
變量的類型應該沒有關係;閉包創建時閉包捕獲狀態。有關於您在關閉中保留的函數的參考。然後,您將原件設置爲* new *函數引用;沒有理由閉合應該做任何不同於它爲一個字符串。 –
你並沒有在任何地方改變你的原始功能。 – Nit
@nit see //更改原始功能 – y3sh