大師們幾乎回答你的問題。是的,這個代碼將使用越來越多的內存,取決於你的數組包含多少個閉包。不得不說,大多數現代發動機都會分配一個對分配給變量MyFunct
的功能的引用,以及包含閉合變量的特定「呼叫對象」。換句話說,你的陣列會看的線沿線的東西:
myFuncArray[0] = {call:
{myPoint:'Whatever value was passed to the addValues function the first time'},
valueOf: myFunct};
//the actual value is a reference to myFunct
//JS provides an implicit link to the call property, which is bound to this particular reference
myFuncArray[1] = {call:
{myPoint:'The value passed to addValues the second time'},
valueOf: myFunct};
您沒有訪問對象本身,但是這僅僅是想JS將如何保存在內存中組織做事的方法。
稍微偏離主題,但你要創建一個隱含的全球與MyFunct
變量:
function addValues(myPoint)
{
var anotherClosureVar = 'This will be accessible, too: it\'s part of the closure';
var myFunct = function()
{//use var to declare in addValues scope, instead of using an implied global
var myVar="Line " + myPoint;
console.log(myVar);
console.log(anotherClosureVar);//will work, too
};
myFunctArray.push(myFunct);
}
總而言之,如果這是你的代碼,內存不應該是什麼大問題。即使此代碼要在舊的JScript引擎上運行,在耗盡大量內存之前也需要一些時間。
不過,考慮這樣的東西是一種好習慣,而且我確實希望我在這裏有意義,我不是母語者,這使得解釋JS的更多方面有點棘手
好的JS引擎可能只是存儲一次函數;在多次存儲功能代碼方面沒有多大意義 - 只是範圍需要每次都有所不同。 – ThiefMaster
人們會希望如此。我不打算暗示其他情況。 – Thilo