javascript - jquery作用域问题求教
天蓬老师
天蓬老师 2017-04-10 14:31:20
[JavaScript讨论组]

这样一段代码
'''javascript

$(function(){
    var ti=null;        
    ti=setInterval('scro("#con1")',500);
    $('#con1').hover(function(){
        clearInterval(ti);  
    },function(){
        ti=setInterval('scro("#con1")',500);
    })
})

function scro(obj){
    $(obj).animate({marginTop:'-24px'},500,function(){
        $(this).css({'margin-top':'0px'}).find('li:first').appendTo(this);  
    });     
};

'''
为什么把函数scro放到$(function(){})里面,函数就会报错而不执行,求指教,谢谢。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
巴扎黑

放在$(function(){})里面跟放在外面,作用域不一样了,后者是全局作用域。

你这里用了setInterval,第一个参数用的是字符串,这里跟setTimeout类似,可以参考MDN的描述>>

字符串会在全局作用域内被解释执行,所以当setTimeout()函数执行完毕后,字符串中的变量不可用.

留意第一句话,字符串会在全局作用域内被解释执行,那么如果你把scro放在里面的话,全局就找不到scro了。


我试着在console运行一下验证代码:

你看第二个,输出的是执行外部的t的结果,这里看下第一个,就是怎么调用到里面的t的方式。用一个function(){}包裹,而不直接用字符串。

大家讲道理

这段代码我觉得从实践上并不是很优化,我从我的思路帮你写一下,参考一下

    var $con = $('#con1'), intID

    function setInt(){
        intID =  setInterval(function(){
          $con.animate({marginTop:'-24px'},500,function(){
             $(this).css({'margin-top':'0px'}).find('li:first').appendTo(this);  
          });
        },500);
    }   

    setInt()

    $con.hover(function(){
        clearInterval(intID);  
    },function(){
        setInt()
    })

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

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