2011-09-15 71 views
22

为什么JSLint会在使用尚未定义的函数时抱怨?关键是函数是被定义的 - 如果那个函数调用了那个函数,那个函数就存在了,事情就会起作用。jsLint错误:“在定义之前使用了somefunction()”

看看下面的代码:

function foo() 
{ 
    // calls bar() 
}; 

function bar() 
{ 
    // calls foo() 
}; 

有没有办法来组织这样一种方式,它将使JSLint的快乐2种方法。我该如何处理这个问题?

回答

13

看到这个答案:

Contending with JS "used before defined" and Titanium Developer

基本上,如果你使用foo = function() { ... }形式,你可以在上面声明var foo, bar;避免JSLint的错误。

+5

但是这与函数foo()有点不同,是函数表达式和全部。另外,由于提升,在顶部声明'var foo,bar'是多余的。所以,简而言之,'var foo = function()...,var bar = function()...'在技术上会做得很好。此外,我认为,考虑到函数声明是在其他任何东西之前加载的--JSLint应该已经修复了它们的东西。 – ZenMaster

+8

@ ZenMaster:一个'jslint',['jsHint'](http://www.jshint.com/docs/)的分支,解决了这个问题,让你在选项中设置''latedef':false''。 (它不影响变量名称,只是函数名称。) –

+1

这个答案将打破依赖函数定义提升的代码〜 –

15

就我所知,JSLint无法处理这个问题,但基于JSLint的JSHint以正确的方式解决了这个问题。

只需使用“latedef”属性并将其设置为“false”即可。如果你想检测这些有问题的变量定义,但想使用函数表达式并允许这些函数提升,可以设置“latedef”:“nofunc”。

看看吧here

+0

一个注释 - “latedef”选项的“nofunc”值有助于避免检查函数声明(不是表达式)。 – Alexei

相关问题