Cet article présente principalement les problèmes de portée des minuteries en js. Il a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
/* 各种运动 */ function Animation(){}; Animation.prototype={ /* 匀速运动 */ linear:function(obj,target){ obj.timer=null; clearInterval(obj.timer); var step=obj.offsetLeft<target?5:-5;//用位置来判断运动的方向 if(obj.offsetLeft!=target){ obj.timer=setInterval(function(){ var res=target-obj.offsetLeft;//核心好代码 当运动到指定位置的时候差值不会超过5 来作为停止运动的条件 if(Math.abs(res)<=Math.abs(step)){ obj.style.left=target+"px"; clearInterval(obj.timer); } else{ obj.style.left=obj.offsetLeft+step+"px"; } } ,1000/60); } }, /* 循环往复运动 */ loop:function(obj,target){ var timer=null; clearTimeout(timer); var fn=arguments.callee.bind(this);//绑定this指向 if(obj.offsetLeft==target){ this.linear(obj,0); } else if(obj.offsetLeft==0){ this.linear(obj,target); } /* 定时器的作用域是全局作用域 在里面调用的函数都是全局作用域下调用的 */ timer=setTimeout(function(){ fn(obj,target); },900); } } var animation=new Animation(); 刚开始我没有绑定fn的this指向的时候 一直报错
.
Je pensais à ce qui se passait. La fonction est évidemment définie dans Animation et la méthode est également appelée par celle-ci Donc cela devrait pointer vers Animation
<🎜. >
Alors j'ai continué à regarder en bas et j'ai vu
Oh, je comprends setTimeout et setInterval
Il s'écrit généralement ainsi
timer=setTimeout(function(){},1000/60);
forme une fermeture. La portée de la fonction ordinaire dans la fermeture est window
, donc si fn est exécuté sous window, alors c'est window
Et linéaire est défini dans Animation, donc la fonction est introuvable et une erreur est signalée
Peu importe si la portée de la fonction fn est liée à Animation
var fn=arguments.callee.bind(this); 当调用loop的时候 this指的就是Animation 如果没明白 我再举一个简单的例子 var obj={ age:"17; } setInterval(function(){ console.log(this.age); }.bind(obj),1000);
Analyse des objets DOM en JavaScript
Comment résoudre le plug-in de pagination angulaire- en tm. Le problème du déclenchement secondaire de la pagination
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!