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

Use*_*343 10 javascript ajax jquery settimeout liferay

function tryToDownload(url)
{

       oIFrm = document.getElementById('myIFrm');
       oIFrm.src = url;
      // alert(url);
      // url=escape(url);

      setTimeout(deletefile(url), 25000); 
}
Run Code Online (Sandbox Code Playgroud)

以下是deletfile函数

function deletefile(url){

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

    }
    });
}
Run Code Online (Sandbox Code Playgroud)

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

Sir*_*rko 19

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

setTimeout(deletefile(url), 25000);
Run Code Online (Sandbox Code Playgroud)

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

setTimeout( function(){ deletefile(url); }, 25000);
Run Code Online (Sandbox Code Playgroud)

编辑

@Petah提出的另一种选择:

setTimeout(deletefile, 25000, url);
Run Code Online (Sandbox Code Playgroud)

setTimeout()在延迟之后传递给的所有参数将在执行时传递给函数.因此,在这种情况下,通过参考 的功能,延迟,然后将参数的顺序的功能!

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