JSLint:在定义错误之前使用函数


74

我正在使用JSLint验证我的大多数外部Javascript文件,但是我得到的最大错误是来自在定义它们之前使用的函数。

这真的是我应该担心的问题吗?

似乎Firefox,IE7和Chrome不在乎。根据JSLint的说法,像popular init()(我经常使用)之类的功能通常位于顶部,因为这对我来说很有意义(我喜欢假装类似于main()),因此需要将其压入文件的底部。

Answers:


69

如果使用function关键字声明函数,则可以在声明函数之前使用它们。但是,如果通过其他方法(例如,使用函数表达式或Function构造函数)声明函数,则必须在使用函数之前先声明函数。有关更多信息,请参见Mozilla开发人员网络上的此页面

假设您使用function关键字声明了所有函数,我认为这将成为编程风格的问题。就我个人而言,我更喜欢以一种看起来合乎逻辑的方式构造函数,并使代码尽可能易于阅读。例如,像您一样,我会将init函数放在顶部,因为这是一切的起点。


2
我也更喜欢init方法。所以它使用的功能在下面。如何忽略或破解此错误,因为它使我无法看到代码中的下一个JsLint错误?我想要一种通用的方式来保持我的风格,但看不到此错误。
Zon 2016年

86

由于这是Google收视最高的命中,而其他人最初可能不会在jslint工具中看到它,因此有一个名为“ Tolerate misordered definitions”的选项可让您隐藏这种类型的错误。

/*jslint latedef:false*/

5
将该选项设置为true似乎并不能为我“解决”此问题。
马库斯·木卫五马格努森

我遇到了与Markus相同的问题。
M. Herold

您可以分享您的JavaScript吗?@ M.Herold
kontur

4
@PeterMajeed不,不是。克里斯不是在问如何容忍错误的定义。
borisdiakur 2014年

33

如果您使用的是jshint,则可以设置latedefnofunc,它将仅忽略后期的函数定义。

文档-http: //www.jshint.com/docs/options/#latedef

用法示例:

/* jshint latedef:nofunc */

noop();

function noop() {}

希望这可以帮助。


这是2014年的解决方案。
Hozuki 2014年

2
该解决方案仅适用于jshint吗?我使用“托架”,并且收到很多棉绒警告。皮棉是否应该与此提示解决方案兼容。我没有得到它的工作。
Andreas Jansson

11

从jslint的网站(http://www.jslint.com/lint.html),您可以了解/ * global * /指令,该指令允许您设置假定在其他地方声明的变量。

这是一个示例(将此放在文件顶部):

/*global var1,var2,var3,var4,var5*/

根据我的经验,实际上不需要:true:false,但是根据我在网站上阅读的内容,建议使用它。

确保初始全局语句与处于同一行/*,否则将中断。


3
对我来说,全局一词也必须直接在星号后,不能有空格,否则它将被忽略。
卡尔·普里切特


2

.jshintrc文件中,设置:

  "latedef": "nofunc",

1

非常遗憾,latedef选项已删除。尝试创建顶部带有接口的“类”时,这是必不可少的

function SomeClass() {
   var self = this;
   self.func = func;

   function func {
      ...
   }
}

这种样式非常普遍,但是不会通过jsLint,因为func在定义之前就已“使用”。必须为每个“成员”功能使用全局变量是一件很痛苦的事情。


0

您始终可以在顶部声明有问题的功能

例如:var init;

....但是当您进一步到达真正的定义时,您将必须删除“ var”:

初始化= function(){};


2
警告:init = function(){}function init() {}ECMAScript不同,匿名函数有不同的规则,这就是第一个规则。
罗恩·沃特伦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.