Dizi listesi çok büyükse, aşağıdaki özyineleme kodu neden yığın taşmasına neden oluyor? Bunu nasıl düzeltebilirim ve özyinelemeyi hala koruyabilirim?Özyinelemeli işlevde büyük bir dizi işlenirken taşma taşması
var list = readHugeList();
var nextListItem = function() {
var item = list.pop();
if (item) {
// process the list item...
nextListItem();
}
};
JavaScript'in çok sınırlı arama yığını boyutu vardır. ES6 için uygulamalar güncellendiğinde bu durumun değişmesi gerektiğine inanıyorum çünkü uygun kuyruk çağrıları IIRC'nin bir parçası. Bunu düzeltmek için senkronize olmayan gruplar halinde yapmanız gerekir, ancak bu kodunuzun bir geri arama gerektirmesini sağlayacaktır. –
@quint Ayrıca, bazı tarayıcılarda maksimum çağrı yığını 1400'ün biraz üzerindedir. Bu, Opera 12.17 ve feryat durumudur. Bir çözüm, 1 milisaniyeden bir 'setTimeout' kullanmak olacaktır. –
@IsmaelMiguel: Wow, Opera için düşük olduğunu hiç bilmiyordum. Delilik bu. –