[英]JavaScript setTimeout infinite loop without recursion
我不能使用Obfuscator.io來丑化我的 JS 腳本,因為它在調用自身的函數中包含一個setTimeout
。
MCVE:
function repeater() {
// DO SOME STUFF...
setTimeout(repeater, 100);
}
repeater();
重現所需的自定義混淆設置:
- 標識符名稱生成器: Mangled
- 保留名稱: $ - jQuery
Obfuscator.io 的錯誤信息:
錯誤:類 t 中的 @postConstruct 錯誤:類 t 中的 @postConstruct 錯誤:超出最大調用堆棧大小
我已經閱讀了其他一些關於此的 Stack Overflow 問題。 據我所知,調用setTimeout(func)
內func
實際上不是遞歸。
但是, Obfuscator.io 的算法仍然無法處理自調用setTimeout
延遲。
如何使用setTimeout
創建一個重復執行的函數而不在函數本身中調用它? 我不想使用setInterval
因為我希望每次在函數代碼運行后開始延遲。 setInterval
忽略了這一點。
我這個你有這樣的事情:
function repeater() {
// DO SOME STUFF...
const someCodeInJQuery = $('#someId')
setTimeout(repeater, 100);
}
repeater();
只需要更改為:
function repeater() {
// DO SOME STUFF...
const someCodeInJQuery = jQuery('#someId'); // Pay attention here
setTimeout(repeater, 100);
}
repeater();
答案:將代碼中的 $ 更改為 jQuery,因為混淆器有保留字
推薦:最好的方法 - 使用uglifyJS而不是混淆器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.