js--延时执行

在js里面怎么延时执行一个函数?一般利用setInterval,setTimeout进行延迟异步执行,或者利用while循环,sleep()进行同步阻塞。

这里有一篇写得挺好的博文,可能有助于对这个的理解,http://club.sm160.com/showtopic-931637.aspx

考虑到如果应用多次,可以针对Function全局对象进行扩展,为函数增加一个延时方法如delay,这样会让代码更简洁有效。

Function.prototype.delay = function(this1,timeout){
    this1 = this1 || null;
    timeout = timeout || 0;
    var _this = this; // refer to function hi
    var args = [];

    console.log('delay is called');
    switch(arguments.length){
        case 1:
            timeout = parseInt(arguments[0]);
            timeout = isNaN(timeout)? 0 :timeout;
            timeout = timeout<0 ? 0 :timeout;
            break;
        default:
            for(var i=0;i<arguments.length;i++){
                console.log('args['+i+']='+arguments[i]);
                if(i>1) args.push(arguments[i]);
            };
            break;
    };

    var proxy = function(){
        _this.apply(this1,args);  //equals to xx1.hi(args)
    };

    return window.setTimeout(proxy,timeout);
};

var xx = function(n){
    this.name = n;
};

xx.prototype.hi = function(a,b){
    console.log('name='+this.name+'--'+a+'--'+b);
}

var xx1 = new xx('lgm');
var t = xx1.hi.delay(xx1,1000,"zj","jm");

xx1.hi("ilzj","iljm");

封装完这个之后,我又有了一个问题,setTimeout在后台是如何执行的?js的单线程又是如果执行的呢?

下面代码的执行结果又是什么呢?
setTimeout(function(){console.log("0")},0);
console.log("1");
setTimeout(function(){console.log("2")},3000);
setTimeout(function(){console.log("3")},1000);
setInterval(function(){console.log("4")},2000);
console.log("5");

输出 :1 5 0 3 4 2 4

 

其实这张图片能够很好地解析一切,假如是函数里面的命令,click命令跟(timer)setTimeout的命令同时到达,进队列的顺序按上图一样,那么就能够很好地解析那个例子了

posted @ 2013-01-27 14:05  GM_Lv  阅读(3342)  评论(0编辑  收藏  举报