我有代码声明函数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
答案 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"