什么(浏览器插件?)将p定义为字符串www311

时间:2014-02-23 12:05:31

标签: javascript

我有代码声明函数p(),它在一些用户看似随机失败。调试显示p已经被声明为字符串“www311。”。我们代码中的任何内容都不包含此类字符串,因此它必须来自浏览器。

我怀疑是一个浏览器插件,但我无法弄清楚是什么。以下用户代理收集了上述错误:

Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.36(KHTML,与Gecko一样)

Mozilla / 5.0(Windows NT 6.0)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 33.0.1750.117

Mozilla / 5.0(Windows NT 6.1; WOW64; rv:27.0)Gecko / 20100101 Firefox / 27.0

1 个答案:

答案 0 :(得分:1)

我认为真正的问题是你的代码中有这些全局变量:)

使用IIFE封装您的代码。

转过来:

 //your code
 function p(){
 }
 // this is in the global namespace.

进入这个:

 (function(){ // functions get their own scope
     //your code
     function p(){ // p is no longer global
     }
 })(); // note that the function is immediately invoked here so you get the same result.

或者,您可以使用像RequireJS这样的模块加载器来处理全局问题。既然你也把模块放在函数中 - 你就不必担心全局变量了。

这是an interesting read about it from Addy Osmani's "Learning JavaScript design patterns"