我是java脚本的新手,目前正在阅读John Resig的JavaScript JavaScript技巧。在解释关闭时,他将setTimeout("otherFunction()",2000)
称为新JS开发人员遇到问题的情况。我无法理解为什么这是一个问题?有人可以解释一下吗?在http://www.w3schools.com/js/js_timing.asp中,我看到一个类似于我的电话var t=setTimeout("alertMsg()",3000);
。setTimeout(“otherFunction()”,2000)为什么是错的?
回答
这是不是“错”,它只是不一定是“正确的”,它当然不推荐。
setTimeout()
function的第一个参数可以是字符串或函数参考/函数表达式。
如果你传递一个字符串,它将会变慢,因为你实际上在做一个eval()
这就是not recommended。比速度更重要的是,字符串中的代码执行的范围可能不是你所期望的(并且在不同的浏览器中可能不一样)。
通过传递函数引用/函数表达式,可以避免这些问题。
“正确”的语法您的例子是:
setTimeout(otherFunction, 2000);
注意有没有括号otherFunction
后 - 如果有它会立即打电话otherFunction()
并从该函数传递返回值setTimeout()
。
如果你需要传递参数给你的功能,你可以在一个匿名函数把它包:
setTimeout(function() {
otherFunction(param1, param2);
}, 2000);
这似乎那种笨重相比setTimeout("otherFunction(param1,param2)", 2000)
,但它再次与其中otherFunction
,param1
范围避免问题和param2
被定义。
建议的方法是使用以下命令:
setTimeout(otherFunction, 2000);
或关闭:
setTimeout(function() {
otherFunction();
}, 2000);
不要使用这需要一个字符串作为第一个参数过载,因为JavaScript解释器将需要将此字符串解析为JavaScript代码。
是的,你链接到http://www.w3schools.com的网站可能是学习编程最糟糕的网站之一。它显示了你不应该做的事情。
因为它每次都必须eval
otherFunction()
(并因此产生一个解释器的新实例)。如果您提供该函数的参考,则setTimeout
可以执行它,而不必产生新的解释器。
所以使用:
setTimeout(otherFunction,2000);
“产卵新实例”正是这个原因,而不是“不推荐”左右。 – georg 2012-01-31 09:06:49
任何包含在“”是一个字符串,一个JavaScript解释器通常需要解析的字符串。
即使工作,解析字符串也是不必要的。
如果我们简单地用
setTimeout(alertMsg,3000);
,
做任何额外的(不必要的)工作,从而更好地代码解释是不需要的。
而不是setTimeout("otherFunction()",2000)
,直接通过做 setTimeout(otherFunction,2000)
要好得多。以前的方法必须做eval
字符串"otherFunction()"
。
- 1. setTimeout的语法是什么?
- 2. 为什么人们使用setTimeout(“func()”,...)而不是setTimeout(func,...)
- 3. 为什么settimeout块eventloop
- 4. setTimeout为什么非高效
- 5. Angular的setTimeout的目的是什么?
- 6. 为什么setTimeout的是不是在JavaScript执行
- 7. 什么是由setTimeout调用的函数?
- 8. 什么是setTimeOut()的JavaScript等效于Android?
- 9. 为什么可以使用的setTimeout( “1”)
- 10. 为什么是错
- 11. setTimeout返回什么?
- 12. SQL Server 2000 - 什么是“实际行数”?
- 13. 为什么setTimeout只执行一次?
- 14. 为什么AJAX settimeout不起作用?
- 15. 为什么setTimeout代码被阻止?
- 16. 为什么requestAnimationFrame比setInterval或setTimeout更好
- 17. 为什么setTimeout回调会给我一个错误?
- 18. 为什么这是错
- 19. 为什么我的Javascript setTimeout函数的行为像一个setInterval?
- 20. 什么是错在我的代码?为什么错误味精
- 21. 为什么Javascript将00的2位数年份评估为1900而不是2000?
- 22. 为什么语言是不是装的?我做错了什么?
- 23. 什么是错的
- 24. 为什么分配是错误的?
- 25. 在Javascript中,setTimeout中使用的变量的范围是什么?
- 26. jquery-mobile事件顺序,为什么setTimeout将$ this设置为undefined?
- 27. SQL server 2000中的这个操作数(* = star-equals)是什么?
- 28. SQL 2000 MSDE安装的建议setup.ini是什么?
- 29. 是什么触发了SqlServer 2000中的缓存清除工作
- 30. 支持Windows 2000的普遍共识是什么?
你已经找到了为什么w3schools不是一个很好的学习网站的几个例子之一。有关更多信息,请参见http://w3fools.com/ – 2012-01-31 08:00:56