我是否需要告诉jslint有关尚未在另一个函数中定义的函数?

时间:2012-09-26 10:46:56

标签: javascript jquery

我有这样的代码:

function dialog($link) {
    "use strict";

   function doDialogAjax() {
        $.ajax({
            cache: false,
            url: url,
            dataType: 'html'
        })
            .done(onDialogDone)
            .fail(onDialogFail);
   }

   function onDialogDone(data) {
        content = data;
   // ... 
   }
}

jslint抱怨onDialogDone尚未定义。我是否真的需要在代码顶部将其定义为全局。我问的原因是因为我认为onDialogDone的功能不是全局的。它只是一个尚未在外部函数中定义的函数。

我是否正确地说,以这种方式定义的函数在最后一个大括号后的末尾不应该有分号?

3 个答案:

答案 0 :(得分:0)

jslint抱怨许多事情,因为它的作者认为它们风格不好,不是因为它们本质上不正确。

在这种情况下,您的函数定义将被提升到作用域的顶部,并且是完全有效的代码。

关于分号问题,包含一个问题是没有害处的。但是,ES5规范并不要求它。

答案 1 :(得分:0)

您不需要将其定义为全局,只需在ajax调用之前定义它。实际上这无关紧要有两个原因:

  • 函数定义无论如何都是hoisted
  • ajax调用是异步的,因此下面的代码将在回调被触发之前执行

尽管如此,拥有符合jslint标准的代码是件好事,但这不是生死攸关的问题;)

答案 2 :(得分:0)

你的代码非常好。但是,由于JSLint使用Pratt Parser (Top Down Operator Precedence)来分析您的代码,当它第一次看到onDialogDone时,它会抱怨,因为它尚未定义。

要防止它抱怨,只需将功能移至顶部即可。这样,JSLint将首先解析定义,当它看到.done(onDialogDone)时,它将知道符号onDialogDone所指的内容。

function onDialogDone(data) {
  // ...
}

function doDialogAjax() {
  // ...
}