将字符串传递给setTimeout时导致“函数未定义”的原因是什么?

时间:2010-09-18 11:25:12

标签: javascript settimeout

var my_new_function = function(){
----
};
window.setTimeout(my_new_function, 1600);

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

当我使用时:

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

它工作正常,但是firebug显示错误:

  

未定义my_new_function

在一些关于setTimeout的文章中,我发现调用函数就像在第一种方法中一样,在其他一些文章中,我看到了另一种方法。

哪个更正确?为什么萤火虫会出现这样的错误?

3 个答案:

答案 0 :(得分:3)

使用

调用该功能时
window.setTimeout(my_new_function, 1600);

您正在设置对该功能的引用。

第二个setTimeout示例中的函数

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

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

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

调用setTimeout的另一个选项是

window.setTimeout( function(){ my_new_function(); }, 1600);

答案 1 :(得分:1)

使用哪个并不重要。如果传递一个字符串,它将在定时器被触发时变成一个函数。不过,第一种方法对我来说看起来更干净。

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

答案 2 :(得分:1)

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

不起作用,因为它等同于:

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

并且窗口范围中没有定义此类函数。您在局部变量范围内声明它。