Javascript 是“JSHint”吗;已经定义了;IIFE模块内部的错误真的有效吗?

Javascript 是“JSHint”吗;已经定义了;IIFE模块内部的错误真的有效吗?,javascript,jslint,jshint,module-pattern,iife,Javascript,Jslint,Jshint,Module Pattern,Iife,我获取了一些编译过的TypeScript(也尝试了CoffeeScript)的输出,并将其放入WebStorm。当我这样做时,JSHint会抱怨Snake函数的内部声明“Snake”已经定义好了 var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d;

我获取了一些编译过的TypeScript(也尝试了CoffeeScript)的输出,并将其放入WebStorm。当我这样做时,JSHint会抱怨Snake函数的内部声明“Snake”已经定义好了

var __extends = this.__extends || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    __.prototype = b.prototype;
    d.prototype = new __();
};
var Animal = (function () {
    function Animal(name) {
        this.name = name;
    }
    Animal.prototype.move = function (meters) {
        alert(this.name + " moved " + meters + "m.");
    };
    return Animal;
})();

var Snake = (function (_super) { 
    __extends(Snake, _super);
    function Snake(name) { //Warning registered here
        _super.call(this, name);
    }
    Snake.prototype.move = function () {
        alert("Slithering...");
        _super.prototype.move.call(this, 5);
    };
    return Snake;
})(Animal);
我可以使用
/*jshint-W004*/
禁用警告,但由于我们在一个函数范围内,因此该警告似乎无效

var __extends = this.__extends || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    __.prototype = b.prototype;
    d.prototype = new __();
};
var Animal = (function () {
    function Animal(name) {
        this.name = name;
    }
    Animal.prototype.move = function (meters) {
        alert(this.name + " moved " + meters + "m.");
    };
    return Animal;
})();

var Snake = (function (_super) { 
    __extends(Snake, _super);
    function Snake(name) { //Warning registered here
        _super.call(this, name);
    }
    Snake.prototype.move = function () {
        alert("Slithering...");
        _super.prototype.move.call(this, 5);
    };
    return Snake;
})(Animal);
现在是奇怪的部分。如果在函数声明之后将
\u extends
调用向下移动到,错误将消失

function Snake(name) {
    _super.call(this, name);
}
__extends(Snake, _super);
我真的有两个问题,但第一个是我的主要问题,我将奖励我的答案

  • 这个警告有效吗
  • \u extends
    调用向下移动到函数声明下面会产生什么后果

  • 它似乎在抱怨,因为内部变量隐藏了一个同名的外部变量,这可能会造成混淆

    根据另一个SO回答,2013年7月,针对这一行为做出了承诺。(关于JSLint)

    JSLint现在在定义与相同名称的变量时发出警告 外部范围内的东西。这是令人困惑的,因为读者 很难判断他在看哪个变量。这有时是一个错误 错误,因为新变量意外地隐藏了旧变量。在里面 在某些情况下,旧的是预期的


    它似乎在抱怨,因为内部变量隐藏了一个同名的外部变量,这可能会造成混淆

    根据另一个SO回答,2013年7月,针对这一行为做出了承诺。(关于JSLint)

    JSLint现在在定义与相同名称的变量时发出警告 外部范围内的东西。这是令人困惑的,因为读者 很难判断他在看哪个变量。这有时是一个错误 错误,因为新变量意外地隐藏了旧变量。在里面 在某些情况下,旧的是预期的