为什么没有延迟执行呢

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <script src="http://4g.ruxiancom.com/skin/js/jquery-1.9.1.min.js"></script>
    <script type="text/javascript">
        $(function() {
            $(".nihao").click(
                    function(){
                        setTimeout("test()",50000);
                        function test(){
                            $(".keyi").hide("slow",function(){
                                alert("我要隐藏了");
                            });
                        }
                    }
                )
            }
        )
    </script>
</head>
<body>
    <div class="nihao">我可以点击一下吗</div>
    <div class="keyi">你要是点击我就隐藏了</div>
</body>
</html>
阅读 3.5k
7 个回答

"test()" 改为 test

前面关于 setTimeout 不能给字符串参数的答案都是胡扯

你的代码不能执行,最直接的问题在于作用域不对,setTimeout传入的字符串会被eval执行,所以这段代码的执行环境是global(全局作用域),而test这个函数是在一个局部作用域里,因此timeout要执行的时候会报错

ReferenceError: Can't find variable: test

因此,只需要把test改为全局变量就可以了:

function test() 替换为 test = function() 其他都不变

当然通过闭包把局部变量test保留下来也是可以的:

字符串"test()" 替换为 函数闭包function(){test()} 其他都不变

我的回答有问题,其他答者已经给出答案了。

<script src="http://4g.ruxiancom.com/skin/js/jquery-1.9.1.min.js"></script>
    <script type="text/javascript">
    // 放在 这里
     function test(){
                            $(".keyi").hide("slow",function(){
                                alert("我要隐藏了");
                            });
                        }
        $(function() {
            $(".nihao").click(
                    function(){
                        // 又或者 定时器 实参 是 函数 比如 setTimeout(test,5000);
                        setTimeout("test()",5000);
                       // 其实 只要 把 test 函数 放 全局 的 地方 就 可以 了
                    }
                );
            }
        );
    </script>
    <div class="nihao">我可以点击一下吗</div>
    <div class="keyi">你要是点击我就隐藏了</div>

谢谢以上所有的人,你们太热心了

setTimeout((这里是个回调函数,而不是一个字符串),延迟时间);

补充更正回答:1楼回答的已经很好了,我自己也做个笔记 setTimeout的回调函数如果不加()会延迟执行且不会执行return的函数,但是如果加上()就会立即执行且其return的函数会延迟执行。

被踩了也怪自己技术功底不够,如果答案有问题,麻烦还请给出理由~

setTimeout第一个参数应该是一个回调函数,不应该是字符串的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题