我不明白为什么第二个函数调用(在函数体之后)优先于一个体内的函数体?
function a(){
var num = 5;
console.log( ++num );
setTimeout( a, 100 );
};
setTimeout(a,2000)
Run Code Online (Sandbox Code Playgroud) 我在javascript中编写了一个基本的作业运行器(也使用了一些JQuery,但那是另一天的另一个故事)我遇到了这个奇怪的问题:
我运行的方法等待所有作业完成:
$.getAllProducts = function(callback){
$.getProductDetails('|ALL|', function(allProductsResult){ //intentionally
var objAllProducts = JSON.parse(JSON.parse(allProductsResult));
var objProductsBuiltUp = {};
var productLength = objAllProducts.length;
$.totalJobs(productLength);
var processed = 0;
$.completedJobs(processed);
$.each(objAllProducts, function(i,v){
$.getProductDetails(objAllProducts[i].ProductCode, function(result){
$.mergeShallow(objProductsBuiltUp, JSON.parse(JSON.parse(result)));
processed++;
$.completedJobs(processed);
});
});
$.wait(0, false, function(isDone){ //allow at least 50ms wait time, otherwise this confuses javascript into thinking there are no callbacks
if (isDone){
callback(objProductsBuiltUp.ProductComponents);
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
工作的处理程序
$.checkProgress = function() {
return $.jobs === $.completed;
}
$.totalJobs = function(total) {
$.jobs = total;
} …
Run Code Online (Sandbox Code Playgroud) 我需要在将来执行一个函数,所以我这样做:
setTimeout(function(){ console.log("hi");}, 3000));
Run Code Online (Sandbox Code Playgroud)
问题是我只想在 3000 毫秒过去后打印。任何人都可以帮助我吗?
function abc() {
console.log("ok")
}
setTimeout(abc, 10000000000000000000000000000000)
Run Code Online (Sandbox Code Playgroud)
当我运行这段代码时,它应该将 ok 的打印延迟 10000000000000000000000000000000ms,但它会立即打印出来。
我该如何解决?
我的javascript代码中有以下行
setTimeout(reload(), 30000);
Run Code Online (Sandbox Code Playgroud)
我希望等待30秒然后调用重载功能.
问题是重新加载函数正在被立即调用而不是等待超时,为什么立即setTimeout
调用重载函数而不是等待指定的时间?该setTimeout
呼叫也正在做一个onloadend
FileReader
功能,如果这将使任何区别.
我不能使用Obfuscator.io来uglify我的JS脚本,因为它包含一个setTimeout
调用自身的函数.
MCVE:
function repeater() {
// DO SOME STUFF...
setTimeout(repeater, 100);
}
repeater();
Run Code Online (Sandbox Code Playgroud)
重现所需的自定义模糊处理设置:
- 标识符名称生成器:Mangled
- 保留名称:$- jQuery
Obfuscator.io的错误消息:
错误:类t中的@postConstruct错误:类t中的@postConstruct错误:超出了最大调用堆栈大小
我已经阅读了其他一些Stack Overflow问题.据我所知,调用setTimeout(func)
里面func
是不实际的递归.
但是,Obfuscator.io的算法仍然无法处理自我调用的setTimeout
延迟.
如何在setTimeout
不在函数本身中调用它的情况下使用重复执行的函数?我不想使用,setInterval
因为我想在函数代码运行后每次都开始延迟. setInterval
忽略了这一点.