jslint:功能超出范围

jslint: function out of scope

我最近一直在摆弄 JS 和其他各种与网络相关的东西,并且在应用它的同时学习了整个东西。

出于兴趣,我将代码放入 JS 验证器 (jslint.com),结果令人震惊。我确实理解大部分警告,但特别是有一个我无法理解。它显示为 'doSomething' is out of scope。我相信,基本上,这是相关部分。我的整个脚本的结构是这样的:准备好的功能开始,然后它进入特定的功能。

$('document').ready(function () {
    $('#btn').click(function () {doSomething();});
});

function doSomething() {
    console.log('did something');
}

我想,如果变量在 if 表达式中声明并在其外部使用,那么它就是 "out of scope"。像这样:

function whatnot() {
    if (true) {
        var x = 10;
    }
    return x;
}

但这如何转化为我的问题?你能帮我理解这个问题,也许可以举出更好的代码结构的例子(或者指出一些可能有帮助的文章吗?)

提前致谢:)

如果您在 $('document').ready 行之前声明您的 doSomething 函数,那么 jslint 将停止抱怨超出范围的问题。

jslint 弄错了。该代码将在没有任何范围界定问题的情况下运行。

但是,作为风格问题,您可能希望在使用它的地方doSomething() 上方定义。虽然 $('document').ready 直到整个 DOM 被渲染才会被调用,并且在脚本标签被完全解析之前不应该发生。作为一种风格,我更喜欢在调用它们之前定义方法,如果将函数定义移动到 ready 块中,jslink 可能会满足。

在JavaScript中,变量是hoisted,本质上这意味着变量声明被移动到脚本文件的顶部,但在声明之前保持未定义。

如果您将函数声明移到点击处理程序中函数调用的上方,超出范围的警告就会消失。