浏览器中的RequireJS:如何在不修改代码的情况下记录变量?

时间:2012-07-31 08:16:58

标签: javascript debugging console requirejs js-amd

我在浏览器中使用RequireJS。我有一些脚本标签加载的JS,如:

requirejs(["jquery", "shared", function($, shared) {
  var foo='bar';
}

我想在Chrome开发工具的JS控制台中打印'foo'的当前值。我怎么能这样做?

编辑2:这个问题最初含糊不清 - 抱歉。为了澄清,我不想停止使用RequireJS,污染全局,或者事先知道我想调试它是什么。

5 个答案:

答案 0 :(得分:4)

在Chrome或Firebug中设置一个断点,以便在关闭时断开。然后,Foo将可用于控制台,直到您恢复脚本执行。

编辑:范围仍然很重要。如果变量在共享成员中是私有的,则需要在shared.js中设置中断,例如,如果我们假设shared.js包含:

var shared = {
    myFunc: function() {
        var foo = 'bar';
        // break here
    }
}

答案 1 :(得分:2)

如果我理解这个问题,使用RequireJS的全部意义不是使用全局变量!

因此我定义了一个console.js模块:

define(function() {
  var nativeConsole = {};
  try {
    // for IE 8/9
    if (!window.console) {
      window.console = {
        log:   function() {},
        debug: function() {},
        info:  function() {},
        warn:  function() {},
        error: function() {}
      };
    }
    nativeConsole = console;
  // Firefox throws an exception if you access the console object and it doesn't exist. Wow!
  } catch (e) { }
  return nativeConsole;
});

然后像这样使用它:

requirejs(["jquery", "console", function($, console) {
  var foo='bar';
  console.warn("foo = " + foo);
}

答案 2 :(得分:0)

你可以用

做到这一点
`requirejs(["jquery", "shared", function($, shared) {   
  var foo=bar;
  console.debug(foo);
}`

同样的命令也适用于Firefox。

答案 3 :(得分:0)

JS控制台已具有您网页的上下文。只需打开控制台,输入“foo”,然后按Enter键。

答案 4 :(得分:0)

将var定义移到闭包之外。

var foo;
requirejs(["jquery", "shared", function($, shared) {
  foo='bar';
});

这样做的缺点是foo现在存在于全局window范围内(变量存在为window.foo),应避免使用全局变量。但它可以帮助调试。或者,只需将其定义为window

requirejs(["jquery", "shared", function($, shared) {
  window.foo='bar';
});

或者,如果您计划执行此操作并使变量保持在调试阶段之外,则应考虑为“您的”变量创建自定义命名空间。

var myNamespace = {};
requirejs(["jquery", "shared", function($, shared) {
  myNamespace.foo='bar';
});

然后你可以window.console && console.log(myNamespace.foo)