繁体   English   中英

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

[英]JSLint: Using a function before it's defined error

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

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

似乎Firefox,IE7和Chrome不在乎。 根据JSLint的说法,像流行的init() (我经常使用)之类的函数通常位于顶部,因为这对我来说很有意义(我想假装它类似于main() ),需要将其推到底部。文件。

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

/*jslint latedef:false*/

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

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

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

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

用法示例:

/* jshint latedef:nofunc */

noop();

function noop() {}

希望这可以帮助。

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

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

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

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

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

要在jshint为所有文件禁用此警告,请将其放在.jshintrc文件中:

{
   "latedef": false
}

在您的.jshintrc文件中,设置:

  "latedef": "nofunc",

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

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

   function func {
      ...
   }
}

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

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

例如:var init;

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

初始化= function(){};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM