【问题标题】:javascript eval methodjavascript 评估方法
【发布时间】:2011-07-13 18:53:31
【问题描述】:

如何查看 javascript eval() 方法中的变量值?是否可以在 eval 方法中“步入”和“越过”?例如,使用这样的代码:

eval("if (true) { var a = 10; a += 20; alert(a); }");

我对在 IE9 中调试更感兴趣,但我也想听听一般原理。

【问题讨论】:

  • 你必须告诉我们你的调试环境是什么,我们才有机会回答这个问题。
  • @Paul Sonier 我在 IE9 中调试,但我也想听听其他浏览器的建议。

标签: javascript debugging eval lazy-evaluation


【解决方案1】:

你不能在 eval 方法中。你给它的代码不是代码而是一个字符串。在 eval() 之后,它变成了代码,你可以检查它。这还取决于您用于调试脚本的工具。在 Chrome 中,如果您单击 Pause on exception,然后执行您的评估。它会中断(因为 b 未定义)并跳转到评估代码中,您可以在其中跨步、进出。你也可以使用new Function("code goes here")() 来评估代码

【讨论】:

  • 是的,看来我可以简单地使用 F11 进入 IE9 中的 eval 代码。此外,IE9 在脚本选项卡的组合框中有一个其他 eval 脚本列表。
【解决方案2】:

如果变量不存在,你怎么知道它的值? - 没门。还有... eval === evil。

【讨论】:

  • 哇,我真的很讨厌这个 eval 是邪恶的废话。 “......如果使用得当,[它] 可以创建一些在其他情况下无法实现的奇妙代码”——John Resig 在“JavaScript Ninja 的秘密”中(他对 JS 的了解比我们任何人都多)。恰当地是这里的关键词,绝大多数时候 eval 是不恰当的,但请不要只是反省这个误称。
  • 模板是 eval 大放异彩的一个很好的例子。然后我会称之为天堂。
  • 2tomfumb: 1) John Resig 不是神。周围有很多有才华的人; 2)也许 Resig 是对的,但它不适用于这种特殊情况。
【解决方案3】:

这是可能的。您必须在源代码中使用 SourceMap。 查看source map,其中包含有关此技术的大量信息。

【讨论】:

  • 我在源地图上发现的大部分内容都是针对缩小代码或 CoffeeScript 的,这一切都让我头晕目眩。我正要放弃让调试器轻松访问我的评估代码,直到我点击上面的链接,然后是另一个链接,最后在blog.getfirebug.com/2009/08/11/… 看到了这个://@ sourceURL=foo.js。我把它放在我在 Chrome 中的 eval 代码的末尾,代码在调试器源面板中显示为 foo.js。
【解决方案4】:

虽然没有完整的文档或建议,但您可以查看局部变量。

var reference;

function alerta(){
  alert(reference[0]);
}

// Desired to be watched must be called as function arguments
(function(a){
  reference = arguments;

  a = 'taco';
  alerta();
  a = 'updatedValue';
  alerta();

})()

http://jsbin.com/oragan

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    相关资源
    最近更新 更多