Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我是否需要告诉jslint还没有在另一个函数中定义的函数?_Javascript_Jquery - Fatal编程技术网

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
时,它还没有定义。