间歇调用和超时调用

跨浏览器获取浏览器窗口距离左边和上边的距离(px)

        var leftPos = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX;
        var topPos = (typeof window.screenTop == "number") ? window.screenTop : window.screenY;

获取浏览器页面视口的大小(标准模式)

        var width = document.documentElement.clientWidth;
        var height = document.documentElement.clientHeight;

获取浏览器页面视口的大小(混杂模式)

        var width = document.body.clientWidth;
        var height = document.body.clientHeight;

Javascript是单线程语言,但它允许通过设置超时值和间歇时间值来调度代码在特定的时刻运行。
Javascript是个单线程的解释器,因此一定时间内只能执行一段代码。
为了控制要执行的代码,就有一个Javascript任务队列。
这些任务会按照它们添加到队列的顺序执行。

调用setTimeout()之后,该方法会返回一个数值ID,表示超时调用。
该ID是计划执行代码的唯一标识符,可以通过它来取消超时调用,
可以调用clearTimeout()方法并将相应的超时调用ID作为参数传递给它。

        var timeoutId = setTimeout(function() {
            alert('Hello world');
        }, 1000);

        clearTimeout(timeoutId);

注:超时调用的代码都是在全局作用域中执行的,因此函数中this的值在非严格模式下指向window对象,在严格模式下是undefined。

        setInterval(function() {
            console.log(new Date());
        }, 1000);

要取消尚未执行的间歇调用,可以使用clearInterval()方法并传入相应的间歇调用ID。
取消间歇调用的重要性远远高于取消超时调用。

        var num = 0;
        var max = 10;
        var intervalId = null

        function incrementNumber() {
            num++;

            // 如果执行次数达到max设定的值,则取消后续尚未执行的调用
            if(max === num) {
                clearInterval(intercalId);
                alert("Down");
            }
        }

        var intercalId = setInterval(incrementNumber, 1000);

也可以使用超时调用来实现:

        var num = 0;
        var max = 10;

        function incrementNumber() {
            num++;

            // 
            if (num < max) {
                setTimeout(incrementNumber, 1000);
            } else {
                alert("Done");
            }
        }

        setTimeout(incrementNumber, 1000);

可见,在使用超时调用时,没有必要跟踪超时调用ID,因此每次执行代码之后,如果不设置另一个超时调用,调用就会自行停止。
一般认为,使用超时调用来模拟间歇调用的是一种最佳模式。
在开发环境中,很少使用真正的间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束之前启动。所以最好不要使用间歇调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值