まず第一に:はい、私はこの答えを読みました...そして、はい、スクリプトの後にメタはありません(ページにメタがないため)、いいえ、タイムアウトやajax-requestはありません
次のヘルパー メソッドがあります (はい、プロトタイプ メソッドを作成することもできました ...):
function removeElementFromArray(array, compareMethod) {
if (!array) {
return;
}
if (!$.isFunction(compareMethod)) {
return;
}
var index = getIndexOfElement(array, compareMethod);
if (index < 0) {
return;
}
array.splice(index, 1);
}
function getIndexOfElement(array, compareMethod) {
if (!array) {
return -1;
}
if (!$.isFunction(compareMethod)) {
return -1;
}
for (var i = 0; i < array.length; i++) {
var element = array[i];
if (compareMethod(element)) {
return i;
}
}
return -1;
}
私はこれを次のように呼び出しています:
$foo.on('click', function () {
removeElementFromArray(window.myArray, function (element) {
return // some condition
});
});
次の行で、「SCRIPT5011: 解放されたスクリプトからコードを実行できません」(IE レンダリング モード < 10 でのみ) という例外が発生します。
array.splice(index, 1);
ただし、最初の呼び出しではなく、後続の呼び出し (同じ配列の場合) ...
しかし、この例外が発生する理由は 1 つも思いつきません。他の行とコールスタックで配列にアクセスしているためです (ご覧のとおり、getIndexOfElement では配列を反復処理しています)。
誰でも私を助けることができますか?