这是写Twitter RT脚本的时候发现的。

之前采用了这样一种性能优化方式:

(function(window){
  var Array = window.Array;
})(window);

然后在Firefox中却提示Array is undefined,很莫名。用console.log把window打印出来才发现里面所有大写开头的变量全部不存在。不知道是怎么回事。想起来Twitter的页面代码全部是用this.Array来代替window.Array的,估计也是避免类似的情况。

只好放弃了这种优化来保证Firefox兼容性。

Update: 浪费了早上宝贵的一个多小时,逐行排查,终于发现真正的原因。

用了GM_addStyle后,好像运行环境变了,于是Array和Math就都从window对象里消失了。

给GreaseMonkey提了个issue,也不知道会不会修好。

Update2: 这个问题应该不会修正,根据MDN对Global对象的描述,并没有提到可以通过window对象访问,而是要在全局作用域的时候访问this才行。

The global object itself can be accessed by this in the global scope.

把测试脚本改了一下,果然是正常的。熟读文档才是王道。