js中为什么setTimeout()无延迟

 <!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript">
            var a;
            a = setTimeout(alert("5s"),5000)
        </script>
    </head>
    <body>  
    </body>
</html>

为什么js中的setTimeout()没有延迟5s弹框,而是直接弹框

这样子写

var a ;
        a=setTimeout("alert('5s')",5000) 

以前还没注意这个问题,setTimeout的第一个参数表示推迟执行函数的指针,alert("5s")
不会被认为是函数的指针或匿名函数的指针,会被直接输出。setTimeout("alert("5s")",5000)这样是可以的,加上双引号后会被认为是一个
匿名函数。上述原因都是自己分析的,希望能对你有所帮助。

setTimeout() 方法
语法
window.setTimeout("javascript 函数",毫秒数);
setTimeout() 方法会返回某个值。在上面的语句中,值被储存在名为 t 的变量中。假如你希望取消这个 setTimeout(),你可以使用这个变量名来指定它。
setTimeout() 的第一个参数是含有 JavaScript 语句的字符串。这个语句可能诸如 "alert('5 seconds!')",或者对函数的调用,诸如 alertMsg()"。
第二个参数指示从当前起多少毫秒后执行第一个参数。
提示:1000 毫秒等于一秒。
实例
等待3秒,然后弹出 "Hello":
setTimeout(function(){alert("Hello")},3000);

        var a;
        a = setTimeout(alert("5s"),5000)
                    你这个代码是将alert的返回值作为setTimeout要执行的代码了
                    ==>
        a = setTimeout(function(){alert("5s")},5000)