我有几个setTimeout语句,在通过闭包编译器运行代码之后,它们似乎不起作用。 我有3种这样的陈述:
1)调用一个函数:
setTimeout("MyFunctionName()", 3000);
2)jQuery
setTimeout("$('#MyDiv').find('.MyClass').addClass('TheNewClass');", 1000);
3)全球变量设定
setTimeout("MyGlobalVar = 2;", 2000);
优化此类代码的最佳方法是什么?
感谢您的建议。
答案 0 :(得分:3)
闭包编译器重命名你的函数和变量,这就是代码中断的原因。作为解决方案,使用如下的匿名函数,因此这些调用也会被重命名。
1)
setTimeout( function() { MyFunctionName(); }, 3000);
或(如jfriend00所述),只要你的函数没有参数:
setTimeout( MyFunctionName, 3000);
2)
setTimeout( function() { $('#MyDiv').find('.MyClass').addClass('TheNewClass'); }, 1000);
3)
setTimeout( function(){ MyGlobalVar = 2; }, 2000);
至于(2)我不确定,这是否是你的代码破坏的唯一原因。
答案 1 :(得分:3)
真正的问题是,您将代码作为字符串传递给setTimeout
,您应该从不做,因为它在功能上等同于使用eval
。
There are many reasons to not use eval
,包括Closure Compiler无法“看到”隐藏在字符串中的代码这一事实。