【问题标题】:jsLint error: “somefunction() was used before it was defined”jsLint 错误:“somefunction() 在定义之前被使用”
【发布时间】:2011-11-17 12:24:18
【问题描述】:

如果某些东西使用了尚未定义的函数,为什么 JSLint 会报错?关键是定义了函数——如果某个东西调用了那个函数,那么这个函数就存在并且事情会起作用。

看看下面的代码:

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

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

没有办法组织这 2 个方法以使 JSLint 满意。我该如何处理这个问题?

【问题讨论】:

    标签: javascript jslint


    【解决方案1】:

    我刚刚处理了一个与此非常相似的问题,问题是我的脚本在函数调用后就位,

    function zzzzz () {
       aaaaa();
       ccccc();
      }
    
    function aaaaa() {
     blah = bla blah blah;
     }
    function bbbbb() {
     blah = bla blah blah;
     }
    function ccccc() {
     blah = bla blah blah;
     }
    

    所以我在脚本之后放置了函数调用,它解决了问题,所以基本我现在几天都看不到答案,所以试一试

    function aaaaa() {
     blah = bla blah blah;
     }
    function bbbbb() {
     blah = bla blah blah;
     }
    function ccccc() {
     blah = bla blah blah;
     }
    
    function zzzzz () {
       aaaaa();
       ccccc();
      }
    

    祝你好运,我希望这会有所帮助

    【讨论】:

      【解决方案2】:

      据我所知,JSLint 无法解决这个问题,但是基于 JSLint 的 JSHint 以适当的方式解决了这个问题。

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

      查看here

      【讨论】:

      • 请注意 - "latedef" 选项的 "nofunc" 值有助于避免检查函数声明(而非表达式)。
      【解决方案3】:

      看到这个答案:

      Contending with JS "used before defined" and Titanium Developer

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

      【讨论】:

      • 但这与function foo() 有点不同,是函数表达式等等。另外,由于提升,在顶部声明var foo, bar 是多余的。所以,简而言之,var foo = function()...,var bar = function()... 在技术上会做得很好。此外,我认为,考虑到函数声明是在其他任何内容之前加载的 - JSLint 应该已经修复了它们的东西。
      • @ZenMaster:jslintjsHint 的一个分支,解决了这个问题,让您在选项中设置"latedef" : false。 (它不影响变量名,只影响函数名。)
      • 这个答案会破坏依赖函数定义提升的代码~
      猜你喜欢
      • 2011-11-06
      • 2014-01-14
      • 2010-10-22
      • 2012-03-26
      • 2012-08-30
      • 2012-05-18
      • 2012-10-09
      • 2014-06-07
      • 1970-01-01
      相关资源
      最近更新 更多