Javascript 是什么原因引起的;“未定义函数”;将字符串传递给setTimeout时?

Javascript 是什么原因引起的;“未定义函数”;将字符串传递给setTimeout时?,javascript,settimeout,Javascript,Settimeout,以上操作正常,没有任何错误 当我使用: var my_new_function = function(){ ---- }; window.setTimeout(my_new_function, 1600); 它工作正常,但firebug显示错误: my_new_函数未定义 在一些关于setTimeout的文章中,我发现了调用函数,如在第1个方法中,在其他一些文章中,我看到了另一个方法 哪个更正确?为什么firebug会显示出这样的错误?使用哪一种都不重要。如果你传递一个字符串,当定时器启动时,

以上操作正常,没有任何错误

当我使用:

var my_new_function = function(){
----
};
window.setTimeout(my_new_function, 1600);
它工作正常,但firebug显示错误:

my_new_函数未定义

在一些关于setTimeout的文章中,我发现了调用函数,如在第1个方法中,在其他一些文章中,我看到了另一个方法


哪个更正确?为什么firebug会显示出这样的错误?

使用哪一种都不重要。如果你传递一个字符串,当定时器启动时,它将变成一个函数。不过,第一种方法在我看来要干净得多


请注意,传递字符串会在窗口范围内运行它,因此函数和其他局部变量可能不存在,并且会失败。

使用哪一个并不重要。如果你传递一个字符串,当定时器启动时,它将变成一个函数。不过,第一种方法在我看来要干净得多


请注意,传递字符串会在窗口作用域中运行它,因此函数和其他局部变量可能不存在,并且会失败。

使用

window.setTimeout("my_new_function()", 1600);
您正在设置对函数的引用

第二个setTimeout示例中的函数

window.setTimeout(my_new_function, 1600);

需要在执行时对其进行评估。当它被评估时,它是在全局范围内执行的。因此,如果函数在本地范围内,浏览器将找不到它。[听起来这是你的问题]


经验丰富的开发人员不建议在setTimeout中使用字符串,因为每次都需要对它们进行评估。这意味着执行需要更长的时间

调用setTimeout的另一个选项是

window.setTimeout("my_new_function()", 1600);

当您使用

window.setTimeout("my_new_function()", 1600);
您正在设置对函数的引用

第二个setTimeout示例中的函数

window.setTimeout(my_new_function, 1600);

需要在执行时对其进行评估。当它被评估时,它是在全局范围内执行的。因此,如果函数在本地范围内,浏览器将找不到它。[听起来这是你的问题]


经验丰富的开发人员不建议在setTimeout中使用字符串,因为每次都需要对它们进行评估。这意味着执行需要更长的时间

调用setTimeout的另一个选项是

window.setTimeout("my_new_function()", 1600);
不起作用,因为它相当于:

window.setTimeout("my_new_function()", 1600);
窗口范围中没有定义这样的函数。您正在局部变量范围内声明它

不起作用,因为它相当于:

window.setTimeout("my_new_function()", 1600);

窗口范围中没有定义这样的函数。您正在局部变量范围内声明它。

我还以为两者是相同的,直到firebug在我使用第二种方法时显示错误。你知道为什么firebug将错误显示为“函数未定义”吗?运行这个,我的帖子解释了它失败的原因:(function(){var my_new_function=function(){alert(“a”);};window.setTimeout(“my_new_function()”,1600);});该函数在局部范围内。我猜这就是Epascarello解释的问题,我也认为两者是一样的,直到firebug在我使用第二种方法时出现错误。你知道为什么firebug将错误显示为“函数未定义”吗?运行这个,我的帖子解释了它失败的原因:(function(){var my_new_function=function(){alert(“a”);};window.setTimeout(“my_new_function()”,1600);});该函数在局部范围内。我猜这就是问题所在,正如使用字符串所解释的那样,使用字符串需要更长的时间来执行,并且将参数传递到这些函数中会让人更加恼火。在任何时候,使用字符串都不是更好的选择。当它被计算时,它是在全局范围内执行的。因此,如果函数在本地范围内,浏览器将找不到它。是的,这个函数在本地范围内。我想这就是原因。“经验丰富的开发人员不会建议在setTimeout中使用字符串,因为每次都需要对它们进行评估。”你能再解释一下吗?@Anish,Gareth在上面的评论中解释了这一点。传递参数的时间更长,难度更大。你必须确保引用是正确的,或者转义它们。您只能传递字符串、数字,而不能传递对象。使用字符串需要更长的时间才能执行,而且将参数传递给这些函数会让人更加恼火。在任何时候,使用字符串都不是更好的选择。当它被计算时,它是在全局范围内执行的。因此,如果函数在本地范围内,浏览器将找不到它。是的,这个函数在本地范围内。我想这就是原因。“经验丰富的开发人员不会建议在setTimeout中使用字符串,因为每次都需要对它们进行评估。”你能再解释一下吗?@Anish,Gareth在上面的评论中解释了这一点。传递参数的时间更长,难度更大。你必须确保引用是正确的,或者转义它们。只能传递字符串、数字,不能传递对象。