开发者社区> 问答> 正文

jquery作用域问题求教

这样一段代码'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(){})里面,函数就会报错而不执行,求指教,谢谢。

展开
收起
云栖技术 2016-05-25 09:26:18 1631 0
1 条回答
写回答
取消 提交回答
  • 社区爱好者,专为云栖社区服务!

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

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

    字符串会在全局作用域内被解释执行,所以当setTimeout()函数执行完毕后,字符串中的变量不可用.
    留意第一句话,字符串会在全局作用域内被解释执行,那么如果你把scro放在里面的话,全局就找不到scro了。

    我试着在console运行一下验证代码:
    screenshot你看第二个,输出的是执行外部的t的结果,这里看下第一个,就是怎么调用到里面的t的方式。用一个function(){}包裹,而不直接用字符串。

    2019-07-17 19:13:26
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关课程

更多

相关电子书

更多
Javascript中的函数 立即下载
JavaScript函数 立即下载
Javascript中的对象 立即下载