我最近一直在搞乱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;
}
但这又如何转化为我的问题呢?你能帮助我理解这个问题吗?也许可以举一个更好的代码结构的例子(或指向一些可能有帮助的文章?)
提前致谢:)
答案 0 :(得分:1)
jslint错了。该代码可以在没有任何范围问题的情况下运行。
然而,作为一种风格问题,您可能希望定义<{1}} 以上使用它。虽然在呈现整个DOM之前不会调用doSomething()
,但在完全解析脚本标记之后才会发生这种情况。作为一种风格问题,我更喜欢在调用它们之前定义方法,如果你将函数定义移到$('document').ready
块内,jslink可能会满意。
答案 1 :(得分:0)
如果您在$('document')。ready line之前声明你的doSomething函数 ,那么jslint将停止抱怨超出范围的问题。
答案 2 :(得分:-2)
在JavaScript中,变量是hoisted,实质上这意味着变量声明被移动到脚本文件的顶部,但在声明之前保持未定义。
如果在单击处理程序中将函数声明移到函数调用上方,则超出范围的警告将消失。