Javascript JSLint';myFunction';超出范围,具体取决于时间';定义

Javascript JSLint';myFunction';超出范围,具体取决于时间';定义,javascript,jquery,scope,jslint,Javascript,Jquery,Scope,Jslint,我有以下代码,最简单的形式是在DOM完全加载时调用函数。我正在使用函数声明,以便在定义之前和之后都可以调用myFunction /*global $*/ $(function() { "use strict"; myFunction(); function myFunction() { // do something } }); 如果在声明之前调用该函数,那么JSLint会给出以下错误: “myFunction”超出范围 如果在调用函数之

我有以下代码,最简单的形式是在DOM完全加载时调用函数。我正在使用函数声明,以便在定义之前和之后都可以调用
myFunction

/*global $*/

$(function() {
    "use strict";

    myFunction();

    function myFunction() {

        // do something
    }
});
如果在声明之前调用该函数,那么JSLint会给出以下错误:

“myFunction”超出范围

如果在调用函数之前先声明函数,那么JSLint不会给出错误。但是,这就破坏了使用函数声明(能够在定义之前和之后调用函数)的全部意义

/*global $*/

$(function() {
    "use strict";

    function myFunction() {

        // do something
    }

    myFunction();
});

有人能解释一下为什么会出现这种情况吗?我想我已经理解了“超出范围”对变量的含义,但我不明白这是如何应用于函数声明的。

这实际上并不是超出范围-这条消息是误导性的。看起来是重复的,只是因为提出了这个问题,错误似乎是sage变得更加神秘。我放弃了JSLint而选择了JSHint(因为它有更好的报告和更少的我不同意的观点)。如果您真的觉得这应该被否决,也许可以提供一个注释来解释如何改进这个问题?在定义变量之前,还有其他一些关于变量使用的问题,但它们不是同一个错误。@nnnn想解释一下它的实际含义吗?这意味着编写JSLint的人不喜欢您构造代码这样,但是他们没有正确地表达消息。代码可以工作,但有些人认为嵌套函数应该在其包含函数的顶部声明,在调用它们的位置之上。其他人则喜欢做相反的事情,并将嵌套函数放在下面。我认为只要保持一致,这并不重要。(我会将这样的JSLint错误视为“建议”,而不是严格的规则。)