我有声明函数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

最佳答案

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

使用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之类的模块加载程序,该模块加载程序将解决globals问题。由于您也将模块放在函数中,因此您不必担心全局变量。

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

关于javascript - 什么(浏览器插件?)将p定义为字符串www311,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21967962/

10-11 09:33