我看到这个用了很多,我被告知在引号之间放置函数引用是不好的,因为setTimeout
/ setInterval
evals
引用。这两者之间的实际差异是什么,一个用于另一个,为什么我会这么频繁地使用它,即使应该知道这种方式很糟糕?
答案 0 :(得分:3)
人们可能没有意识到他们可以使用不带引号的表格。
可能尚未定义字符串中引用的名称。
引用的表单会延迟执行:
setTimeout("myFunction(1, 'hello')", 100)
比以下更容易理解:
setTimeout(function () { myFunction(1, 'hello') }, 100)
并且这不符合作者的要求:
setTimeout(myFunction(1, 'hello'), 100)
答案 1 :(得分:1)
这两种形式有两个主要区别:
setTimeout("myFunc()", 100);
和
setTimeout(myFunc, 100);
第一个效率较低,它会评估全局范围内的函数,因此您无法将其传递给本地函数或任何非全局函数。
看看效率参数,如果你想调用代码中的函数,你会写:
x = myFunc();
或者你会写:
x = eval("myFunc()");
当然,你要写第一个因为:
eval()
是一个相当重要的东西,只有在没有其他更好的方法时才应该使用它。仅供参考,this jsPerf comparison表示eval()
版本慢了96%。在某些情况下,性能可能并不重要,但您可以了解效率低得多。
答案 2 :(得分:0)
我敢打赌它也可以防止内存泄漏。
不泄漏X:
var x = $("loading");
setTimeout("createTree(1);", 0);
泄漏的X:
var x = $("loading");
setTimeout(function(){createTree(1);}, 0);