我甚至不知道如何解釋這個問題,所以我不得不使用例子。這可能看起來不像是有用的代碼,實際上它不是,但這是我剛剛遇到的一個問題的例子,只是簡單的要領。Javascript:當我創建一個新實例時,舊對象會發生什麼?
讓我們假設我有
function myObject(params) {
.. do some time-consuming asynchronous stuff
with AJAX and the like ...
return (before all the above is completed);
}
function myFunction(params) {
var doTheSlowStuff = new myObject(params);
}
myFunction(firstParams);
myFunction(moreParams);
當我做第二個電話會發生什麼到第一myObject的給myFunction()?它是否有機會完成它的工作(如果是的話,它會在什麼時候收集垃圾)?還是在它有機會完成它開始之前被無情地拋棄?
對'myObject'的兩次調用都將完成(即,異步行爲確實會發生兩次)。我不認爲你在這個例子中包含了足夠的信息來確定是否會丟失任何信息,但這很有可能。每次調用'myFunction'都會創建自己的'doTheSlowStuff'變量,所以未來調用不會從另一個調用中銷燬'doTheSlowStuff'。但是,如果該值離開「myFunction」的範圍,則所有投注都將關閉,實際上可能會發生破壞。 – apsillers
您可以從'myObject'返回一個承諾,並在'myFunction'中處理成功。 – elclanrs