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,本质上这意味着变量声明被移动到脚本文件的顶部,但在声明之前保持未定义。
如果您将函数声明移到点击处理程序中函数调用的上方,超出范围的警告就会消失。
我最近一直在摆弄 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,本质上这意味着变量声明被移动到脚本文件的顶部,但在声明之前保持未定义。
如果您将函数声明移到点击处理程序中函数调用的上方,超出范围的警告就会消失。