Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/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代码根本不起作用吗?_Javascript_Settimeout - Fatal编程技术网

为什么';这段javascript代码根本不起作用吗?

为什么';这段javascript代码根本不起作用吗?,javascript,settimeout,Javascript,Settimeout,有人能解释一下为什么吗 Edit:我更改了foo方法以提供帮助。我在编辑代码以发布此问题时出错。您的setTimeout正在调用一个不存在的函数,foo() 或为了完全兼容IE: function main(n){ setTimeout(help,500,n); } setTimeout接受函数引用,而不是字符串。尝试以下方法: function main(n){ setTimeout(function(){ help(n); },500);

有人能解释一下为什么吗


Edit:我更改了
foo
方法以提供帮助。我在编辑代码以发布此问题时出错。

您的
setTimeout
正在调用一个不存在的函数,
foo()

或为了完全兼容IE:

function main(n){  
    setTimeout(help,500,n);
}

setTimeout接受函数引用,而不是字符串。尝试以下方法:

 function main(n){  
    setTimeout(function(){
        help(n);
    },500);
}
function main(n)
{
  setTimeout(function () {
     help(n);
   }, 500);
}
编辑:


setTimeout
可以接受字符串,但此函数不会在
main
的闭包内运行,
n
将超出范围。另外,强烈建议使用函数引用,如上面的示例。

n
在执行帮助函数时不再在范围内。您的
main
应该执行以下操作:

 function main(n){  
    setTimeout(function(){
        help(n);
    },500);
}
function main(n)
{
  setTimeout(function () {
     help(n);
   }, 500);
}

我相信你可能会得到的原因是:

尝试在清除的作用域上运行编译并执行脚本

在Firebug中是由于在页面加载后使用。这也是一个新的Firebug JS错误

一旦它最初运行,您就可以在被允许后写入文档。我尝试使用
document.open()
document.close()
,添加这两个选项并没有解决问题

不过,还有更好的办法。您可以使用它来替换
正文
内容:

function main(n) {
    window.setTimeout(function() {
        help(n);
    }, 500);
}

你的
帮助方法从哪里调用?最好的提问练习是更具描述性,而不是说“根本不起作用”你使用什么浏览器?(我在Chrome、FF和IE9中遇到了“n”未定义”错误)它在我的浏览器上没有显示任何内容,甚至没有说什么错的错误,我在使用Firefox的相关性:抱歉,这是一个错误,这是为了帮助我,我只是在发布问题之前更改了它,忘记了编辑。根据第三个参数,脚本语言是
setTimeout
。这就是为什么我们不信任w3schools。附加的参数与IE不兼容…它可以接受一个字符串-不应该(这是不必要的
eval
),但它可以。啊,有趣的是,从来都不知道它也接受了一个字符串。因此,在这种情况下,当调用时,
n
将超出范围。
document。无论如何,在排队函数中写入
是一个奇怪的想法。。。似乎写入特定DOM元素的内容更好(如您的示例)。
document.body.innerHTML = n + '<br/>;
document.body.innerHTML += n + '<br/>;
var div = document.createElement('div');
div.innerHTML = n + '<br/>';
document.body.appendChild(div);
function help(n){
    var div = document.createElement('div');
    div.innerHTML = n + '<br/>';
    document.body.appendChild(div);

    if (n == 10) {
        n = 1;
    }

    n++;

    main(n);
}

function main(n){
    setTimeout(function(){
        help(n);
    }, 500);
}

main(5);