JavaScript setTimeout无限循环,无需递归

时间:2018-08-21 16:51:09

标签: javascript jquery settimeout stack-overflow obfuscation

我无法使用Obfuscator.io来丑化我的JS脚本,因为它在调用自身的函数中包含一个setTimeout
MCVE:

function repeater() {
    // DO SOME STUFF...
    setTimeout(repeater, 100);
}
repeater();

再现所需的自定义混淆设置:
-标识符名称生成器: Mangled
-保留名称: $ -jQuery

Obfuscator.io's错误消息:

  

错误:类t中的@postConstruct错误:类t中的@postConstruct错误:超出了最大调用堆栈大小

我已经阅读了有关此问题的其他一些Stack Overflow问题。 I understand that calling setTimeout(func) inside func is not actually recursion.

但是,Obfuscator.io's算法仍然无法处理自发的setTimeout延迟。

如何使用setTimeout制作重复执行的函数而不在函数本身中调用它? 我不想使用setInterval,因为我希望每次函数代码运行后都开始延迟。 setInterval ignores that.

2 个答案:

答案 0 :(得分:7)

我认为您的问题实际上是在使用

  • 保留名称: $ -jQuery

将其用作配置结果

enter image description here

您要获得的是什么,如果将其更改为 ^ $ ,这是网站上的文本框和说明应显示的内容,则代码会混淆

enter image description here

  

保留名称

     

禁止混淆和生成标识符,这些标识符与通过的RegExp模式匹配。

     

例如,如果添加^someName,混淆器将确保不会破坏以someName开头的所有变量,函数名称和函数参数。

答案 1 :(得分:1)

我这你有类似的东西:

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代替混淆器