为什么jslint说我的变量超出了范围?

时间:2017-04-04 22:19:05

标签: javascript jslint

为什么jslint说id_interval超出范围?上次检查时,JavaScript是函数作用域。

Pub.elementLoaded = function (id, callback) {
    var isLoaded = document.getElementById(id);
    var id_interval = setInterval( function() {
        if (isLoaded) {
            callback();
            clearInterval(id_interval);
        }
    }, 1);
};

enter image description here

2 个答案:

答案 0 :(得分:0)

JSLint强制执行其作者认为的最佳实践,而不是实际的JavaScript语法规则。引自jslint.com关于变量声明:

  

JSLint使用var规则和let规则的交集,以及   这样做可以避免与之相关的错误。名字应该是   在函数中只声明一次。它应该在它之前声明   使用

在您的代码中,id_interval在其自己的声明中使用,此时它尚未被声明。

答案 1 :(得分:0)

对于像我这样来到这里的其他人也有一个同样的问题:正如@GertG解释的那样,JSLint只希望您在使用它的块之前声明该变量。

在使用var id_interval;之前,必须添加setInterval(),然后在下一行删除var,因为现在您已经声明了它:

Pub.elementLoaded = function (id, callback) {
    var isLoaded = document.getElementById(id);
    var id_interval;
    id_interval = setInterval( function() {
        if (isLoaded) {
            callback();
            clearInterval(id_interval);
        }
    }, 1);
};