【问题标题】:What (browser plugin?) defines p as a string www311什么(浏览器插件?)将 p 定义为字符串 www311
【发布时间】:2014-03-24 22:43:34
【问题描述】:

我有声明函数 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, like Gecko) Chrome/33.0.1750.117

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

【问题讨论】:

  • "调试显示 p 已经被声明为字符串 "www311."" 没关系。只要您的声明之前的定义之后处理,您就会赢。所以它必须是在您的声明被处理之后发生的事情,这似乎令人惊讶。

标签: javascript


【解决方案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"

【讨论】:

    猜你喜欢
    • 2015-11-12
    • 2015-01-12
    • 2019-11-17
    • 2012-06-14
    • 2012-11-25
    • 2021-01-14
    • 1970-01-01
    • 2018-12-23
    • 2010-10-09
    相关资源
    最近更新 更多