javascript setTimeout和谷歌闭包编译器

时间:2012-03-07 16:59:41

标签: javascript google-closure-compiler

我有几个setTimeout语句,在通过闭包编译器运行代码之后,它们似乎不起作用。 我有3种这样的陈述:

1)调用一个函数:

setTimeout("MyFunctionName()", 3000);

2)jQuery

setTimeout("$('#MyDiv').find('.MyClass').addClass('TheNewClass');", 1000);

3)全球变量设定

setTimeout("MyGlobalVar = 2;", 2000);

优化此类代码的最佳方法是什么?

感谢您的建议。

2 个答案:

答案 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无法“看到”隐藏在字符串中的代码这一事实。

相关问题