Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.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/5/fortran/2.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 setTimeout的问题;函数不是define"!_Javascript_Jquery_Settimeout - Fatal编程技术网

Javascript setTimeout的问题;函数不是define"!

Javascript setTimeout的问题;函数不是define"!,javascript,jquery,settimeout,Javascript,Jquery,Settimeout,setTimeout“函数未定义”有问题 这段代码有什么问题 $(document).ready(function(){ function ISS_NextImage() { //ImageSlideShow NextImage $('.ImageSlideShow').each(function() { alert($(".correntImage", this).text()); }); } var t=setTimeout("ISS_NextImage();",1

setTimeout“函数未定义”有问题

这段代码有什么问题

$(document).ready(function(){ 

 function ISS_NextImage() { //ImageSlideShow NextImage
  $('.ImageSlideShow').each(function() {
   alert($(".correntImage", this).text());
  });
 }

 var t=setTimeout("ISS_NextImage();",1000);

});

当您
eval
code时,它是在全局范围内完成的。由于您尝试调用的函数是局部作用域的,因此此操作失败

将函数传递到
setTimeout
,而不是传递要执行
eval
ed的字符串

var t=setTimeout(ISS_NextImage,1000);

避免将字符串传递给setTimeout()。只需传递对函数的引用即可:

var t = setTimeout(IIS_NextImage, 1000);
你也可以:

$(function() { 
    var t = setTimeout(new function() {
       $('.ImageSlideShow').each(function() {
           alert($(".correntImage", this).text());
       });
    }, 1000);
});

尝试将设置的超时调用更改为:

var t=setTimeout(function(){ISS_NextImage();},1000);

你可以这样做:

$(document).ready(function(){ 
    setTimeout(ISS_NextImage,1000);
});

function ISS_NextImage() { 
    $('.ImageSlideShow').each(function() {
      alert($(".correntImage", this).text());
    });
 }

“当您评估代码时,它是在全局范围内完成的”(这就是问题之一。)发生
setTimeout
的范围与发生
eval
的范围不同。这并没有改变你的基本建议,即不使用字符串,而是使用函数引用…这是istruble和其他人已经说过的,几分钟前。一个除了调用另一个没有参数的函数之外什么都不做的函数通常是个坏主意。@David-但是如果您确实想包含带有
ISS_NextImage()
的参数,这将是一个好办法。。。。。这在下一个图像函数中非常常见,因为您可能需要执行类似于
var t=setTimeout(function(){ISS_NextImage((imageIndex+1)%numImages);},1000)通常我使用这种格式有几个原因。1) 有助于打破开发人员传递字符串的习惯,这些字符串被赋值为settimeout;2)能够得到闭包,并通过如下操作轻松解决“this”作为全局对象窗口的问题:var self=this;setTimeout(函数(){ISS_NextImage(self);},1000);根据我的经验,新开发人员不理解javascript中的作用域,也不理解在window.function(大多数情况下)中传递实际发送的函数名,这就是为什么我发现在新开发人员中使用这种语法更好的原因。你可以,但这会使它更难阅读,使用
new
关键字的选择很奇怪。