Javascript 我是否需要告诉jslint还没有在另一个函数中定义的函数?
我有这样的代码:Javascript 我是否需要告诉jslint还没有在另一个函数中定义的函数?,javascript,jquery,Javascript,Jquery,我有这样的代码: function dialog($link) { "use strict"; function doDialogAjax() { $.ajax({ cache: false, url: url, dataType: 'html' }) .done(onDialogDone) .fail(onDialogFail)
function dialog($link) {
"use strict";
function doDialogAjax() {
$.ajax({
cache: false,
url: url,
dataType: 'html'
})
.done(onDialogDone)
.fail(onDialogFail);
}
function onDialogDone(data) {
content = data;
// ...
}
}
jslint抱怨onDialogDone尚未定义。我真的需要在我的代码顶部将其定义为全局的吗。我问这个问题的原因是因为我不认为onDialogDone函数是全局函数。它只是一个尚未在外部函数中定义的函数
我说的这样定义的函数在最后一个大括号后面不应该有分号,对吗?
jslint
抱怨很多事情,因为它的作者认为它们的风格不好,而不是因为它们本质上不正确
在这种情况下,函数定义将被提升到作用域的顶部,并且是完全有效的代码
关于分号问题,包括一个分号没有坏处。不过,ES5规范并不需要它。您不需要将它定义为全局,只需在ajax调用之前定义它即可。事实上,这并不重要,原因有二:
- 不管怎样,函数定义是正确的
- ajax调用是异步的,因此下面的代码将在调用回调之前执行
尽管如此,拥有符合jslint的代码还是不错的,但这不是生死攸关的问题;) 您的代码非常好。但是,由于
JSLint
使用a分析代码,当它第一次看到onDialogDone
时,它会抱怨,因为它尚未定义
为了防止它抱怨,只需将函数移到顶部即可。这样,JSLint
将首先解析定义,当它看到.done(onDialogDone)
时,它将知道onDialogDone
符号所指的是什么
function onDialogDone(data) {
// ...
}
function doDialogAjax() {
// ...
}
我添加了/*全局onDialogDone、onDialogFail、submitHandler*/但是现在jslint抱怨onDialogDone是一个未使用的变量。这有意义吗?@SamanthaJ:不要对函数使用
global
。要解决最初的问题,只需将函数onDialogDone
推到顶部,以便JSLint在调用之前选择其定义。但是,请再次注意,您的代码非常好。只是JSLint没有使用JavaScript解释器,而是使用自上而下的解析器,因此在您当前的代码顺序中,当它第一次检测到符号onDialogDone
时,它还没有定义。