为了账号安全,请及时绑定邮箱和手机立即绑定

jquery作用域问题求教

jquery作用域问题求教

红糖糍粑 2019-03-13 18:19:58
这样一段代码'''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 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

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

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

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

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


我试着在console运行一下验证代码:
https://img1.sycdn.imooc.com//5cb18b92000171f706930192.jpg

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


查看完整回答
反对 回复 2019-04-13
?
绝地无双

TA贡献1946条经验 获得超4个赞

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


    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()

    })


查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 594 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信