jslint:函数超出范围

时间:2016-05-09 15:52:52

标签: javascript scope jslint

我最近一直在搞乱JS和各种与网络相关的事情,并在应用它时学到了很多东西。

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

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

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

我想,如果一个变量在if-expression中声明并在它之外使用,那么它就是“超出范围”。像这样:

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

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

提前致谢:)

3 个答案:

答案 0 :(得分:1)

jslint错了。该代码可以在没有任何范围问题的情况下运行。

然而,作为一种风格问题,您可能希望定义<{1}} 以上使用它。虽然在呈现整个DOM之前不会调用doSomething(),但在完全解析脚本标记之后才会发生这种情况。作为一种风格问题,我更喜欢在调用它们之前定义方法,如果你将函数定义移到$('document').ready块内,jslink可能会满意。

答案 1 :(得分:0)

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

答案 2 :(得分:-2)

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

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