为什么settimeout没有延迟函数执行?

function tryToDownload(url) { oIFrm = document.getElementById('myIFrm'); oIFrm.src = url; // alert(url); // url=escape(url); setTimeout(deletefile(url), 25000); } 

以下是deletfile函数

 function deletefile(url){ $.ajax({ type:'post', url: "", data:{filename:url}, type : "GET", timeout : 20000, dataType : "text", success : function(data) { alert("success"); } }); } 

上面是我的jQuery和我在25秒后调用一个函数,但有些如何不延迟deletefile(url)函数并执行刚刚执行。那么应该是什么问题?

在这一行中,您调用函数并将其结果传递给setTimeout()

 setTimeout(deletefile(url), 25000); 

如果要延迟执行,请添加包装函数:

 setTimeout( function(){ deletefile(url); }, 25000); 

编辑

@Petah提出的另一种选择:

 setTimeout(deletefile, 25000, url); 

延迟后传递给setTimeout()所有参数将在执行时传递给函数。 所以在这种情况下,你将参数传递给函数,延迟,然后按顺序将参数传递给函数!

请注意,根据MDN,这种传递参数的方式在IE9之前不会在IE中工作。

那是因为你正在调用该函数,并使用setTimeout调用中的返回值。 将它包装在匿名函数中,以便setTimeout调用它:

 function tryToDownload(url) { oIFrm = document.getElementById('myIFrm'); oIFrm.src = url; // alert(url); // url=escape(url); setTimeout(function() { deletefile(url); }, 25000); }