Javascript:IE8中的全局变量行为

时间:2012-05-17 09:40:14

标签: javascript requirejs

我在当前项目中使用Require.js。

我曾经用require变量加载Require.js配置,如

require = {
  paths: {
    backbone: "libs/backbone-min",
    bootstrap: "libs/bootstrap.min",
    jquery: "libs/jquery-1.7.2.min",
    underscore: "libs/underscore-min",
    order: "plugins/order",
    text: "plugins/text",
    use: "plugins/use"
  }
};
<script src="http://local.gungroo.com/app/js/config.js"></script>

这在所有浏览器中都运行良好。

最近,我切换到了Coffescript,生成的代码就像

(function() {
  window.require = {
    paths: {
      backbone: "libs/backbone-min",
      bootstrap: "libs/bootstrap.min",
      jquery: "libs/jquery-1.7.2.min",
      underscore: "libs/underscore-min",
      order: "plugins/order",
      text: "plugins/text",
      use: "plugins/use"
    }
  };

}).call(this);

但第二个在IE8中突破。

IE8是否处理变量&var; var require&#39;和&#39; window.require&#39;不同?

2 个答案:

答案 0 :(得分:4)

关于configuration options

的requirejs文档
  

注意:最好使用var require = {}并且不要使用window.require   = {},它在IE中行为不正确。

此问题已报告给github here上的requirejs项目。问题记者(dtanabe)提供了一些示例html和脚本来说明问题。我创建了一个包含该示例代码的小提琴here。请注意,对于IE 9,它的工作方式与其他浏览器(例如Chrome,Firefox)相同,但当我将开发人员工具中的文档模式更改为IE 8时,问题就出现了。针对这个问题,jrburke(詹姆斯伯克)补充了我上面提到的文件。

答案 1 :(得分:0)

在网络浏览器中:

window.require = 'herp';
// is equivalent to
require = 'derp';

window是最高级别。