var my_new_function = function(){
----
};
window.setTimeout(my_new_function, 1600);
以上工作正常,没有任何错误。
当我使用时:
window.setTimeout("my_new_function()", 1600);
它工作正常,但是firebug显示错误:
未定义my_new_function
在一些关于setTimeout的文章中,我发现调用函数就像在第一种方法中一样,在其他一些文章中,我看到了另一种方法。
哪个更正确?为什么萤火虫会出现这样的错误?
答案 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);
并且窗口范围中没有定义此类函数。您在局部变量范围内声明它。