是否有可能从JavaScript中获取“内部”范围的值?

时间:2014-04-28 19:23:59

标签: javascript firefox firebug

例如我有这样的代码:

$(function () {
    var a = {
        init: function () { ...

是否可以在Firebug中挂钩a并在命令行中调用其方法?

4 个答案:

答案 0 :(得分:1)

Firebug使用.%通过command line提供关闭变量检查。当选中显示闭包选项时,它还会在DOM panel内显示它们。

关于闭包检查员如何工作的详细说明可以在Firebug wiki中找到:

https://getfirebug.com/wiki/index.php/Closure_Inspector

答案 1 :(得分:0)

函数内部或闭包内部的变量不能直接从函数外部访问。

访问它们的唯一方法是,如果函数内部的代码提供了一种可公开访问的方法来检索特定数据,因为只有函数内部的代码才能访问它们。

如果这只是一个常规函数(不构成任何类型的闭包),那么该函数中的局部变量只是偶数" alive"在函数的生命周期中,函数完成执行后将被垃圾收集。


如果您只是尝试调试某些内容,可以在该函数内部设置一个断点,并且从该断点开始,您可以将一个全局变量设置为指向该函数内的a之类的内容。然后使用全局变量引用稍后调用。这只是一个调试辅助工具,因为它在正常执行JS时不实用而不修改函数内部的代码。

答案 2 :(得分:0)

我需要在一段时间内对项目做类似的事情 - 我有一些私人价值观,我仍然需要从QUnit测试中访问。

我的解决方案是这样的:

 (function() {
   var innerVars = {
     myvar1: 1,
     myvar2:
   };

   function myMethod() {
     console.log(innerVars.myVar1);
   }


   // Make my return value.
   var r = {
     myMethod: myMethod
   };

   if (window.QUNIT_TEST_IN_PROGRESS) {
     r.inner = innerVars;
   }

   return r;
 }();

答案 3 :(得分:0)

您可以创建一个全局变量,并使其成为您要检查的变量的引用。

$(function () {
    var a = {
        init: function () { ...

    // now make a global variable and reference 'a'
    window.test_a = a;

然后在你的控制台中,你应该能够做到

test_a.init()

显然这只是用于调试目的,否则避免使用全局变量。