【问题标题】:Why does jslint say my variable is out of scope?为什么 jslint 说我的变量超出范围?
【发布时间】:2017-04-04 22:19:04
【问题描述】:

为什么 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);
};

【问题讨论】:

  • 不相关,但选择一个命名约定。

标签: javascript jslint


【解决方案1】:

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

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

在您的代码中,id_interval 在其自己的声明中使用,此时严格来说尚未声明。

【讨论】:

    【解决方案2】:

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

    您必须在使用setInterval() 之前添加var id_interval;,然后在以下行中删除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);
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 2010-11-11
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      相关资源
      最近更新 更多