javascript - 为什么没有延迟执行呢
黄舟
黄舟 2017-04-11 12:31:46
[JavaScript讨论组]



    
    Document
    
    


    

我可以点击一下吗

你要是点击我就隐藏了

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(7)
巴扎黑

"test()" 改为 test

PHP中文网

前面关于 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>
    <p class="nihao">我可以点击一下吗</p>
    <p class="keyi">你要是点击我就隐藏了</p>
巴扎黑

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

巴扎黑

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

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

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

天蓬老师

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号