问题出在setTimeout没有clearTimeout上,
见下面红字部分,
if (bx==ax && by==ay){
           clearTimeout(obj.movement);
           obj=false;
           return;
       }

你是递增或递减2的,但是你下面却判断的是相等,
那假设bx=11,ax=12的时候,它就一直重复做+2与-2操作了,
导致了死循环,
应改为
if ((bx==ax || bx == ax + 1) && (by==ay || by == ay + 1)){
           clearTimeout(obj.movement);
           obj=false;
           return;
       }