是JSHint“;已定义“;IIFE模块内部的错误确实有效
Is JSHint "is already defined" errors inside of IIFE modules really valid?
我获取了一些已编译的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 */
禁用警告,但警告似乎是无效的,因为我们在一个函数中起作用。
现在是奇怪的部分。如果我将__extends
调用向下移动到函数声明之后,错误就会消失。
function Snake(name) {
_super.call(this, name);
}
__extends(Snake, _super);
我真的有两个问题,但第一个是我的主要问题,我会奖励我的答案。
- 这个警告有效吗
- 将
__extends
调用下移到函数声明下面会产生什么后果
它似乎在抱怨,因为内部变量正在跟踪同名的外部变量,这可能会令人困惑。
https://stackoverflow.com/a/17852430/378151
根据另一个SO的回答,2013年7月围绕这一行为做出了承诺。Douglas Crockford表示(关于JSLint)
JSLint现在在定义与外部范围内的东西。这是令人困惑的,因为读者无法轻易判断他在看哪个变量错误,因为新变量意外地隐藏了旧变量。在里面在某些情况下,旧的是预期的。
相关文章:
- SignalR:调用集线器方法时出现内部服务器错误
- 如何解决“;错误所请求的URL返回500-内部服务器错误”;
- 错误:'让'声明只能在块内部声明
- 调用setTimeout内部的函数时发生引用错误
- 使用javascript API响应内部服务器错误将曲目上传到SoundCloud
- AJAX错误状态代码500内部服务器错误
- Jcrop&画布:裁剪区域的大小很奇怪;500内部服务器错误
- 如果JS会话变量为null,如何避免500内部服务器错误
- POST encodeURI查询字符串内部服务器错误 500
- getJSON:网络错误:500 内部服务器错误
- Node.js:Mongoose内部服务器错误
- 缺少用于创建的模板.内部服务器错误-聚合物表单保存到数据库
- 云代码(javascript)失败,原因是:{代码:1,消息:内部错误
- Jquery AJAX Post:500(内部服务器错误)
- 是JSHint“;已定义“;IIFE模块内部的错误确实有效
- 我的联系表格在测试/PHPMailer后给了我一个内部服务器错误(500)
- 随机jquery移动/角度内部错误与安卓浏览器
- 500(内部服务器错误)的外部php文件
- ajax上get函数内部的未定义错误
- Chrome's IndexedDB错误"内部错误检查键存在"是什么意思?