控制台访问$(document).ready函数本地的Javascript变量

Mir*_*vod 19 javascript console jquery

我怎样才能访问里面的一些变量

$(document).ready(function(){
    var foo=0;
    var bar = 3;
});
Run Code Online (Sandbox Code Playgroud)

来自谷歌Chrome控制台?如果我尝试alert(foo),我会收到一条消息,说明它没有定义.

Flo*_*ine 46

在调试器中放置一个断点.当调试器停止时,您将获得对它们的完全访问权限.

告诉你把它们放在全球范围内的其他答案都很糟糕.不要仅因为您不知道如何使用正确的工具而使用不良做法.

  • @Vodaldrien隐藏变量更多的是避免错误和更清晰的代码库:) (3认同)
  • @RocketHazmat for Chrome Dev工具,请参阅[此处](https://developers.google.com/chrome-developer-tools/docs/scripts-breakpoints).对于Firebug,请查看其文档. (3认同)
  • 这是正确答案!只需在你的 js 中的任何地方输入 `debugger`。它可以在任何地方,包括定义,而不仅仅是过程调用。 (2认同)

Xop*_*ter 16

您无法访问这些变量,因为它们是在功能闭包中定义的.唯一可行的方法是在函数范围之外对它们进行全局引用.

var foo, bar;

$(document).ready(function(){
    foo = 0;
    bar = 3;
});
Run Code Online (Sandbox Code Playgroud)

  • 6赞成建议使用全局变量的答案?真? (12认同)
  • 不,这不对.看我的回答. (3认同)
  • 我不建议使用全局变量,只是这是唯一的方法! (2认同)
  • 我认为对于OP来说,理解闭包比如何使用调试工具更重要。 (2认同)
  • 冒着引发火焰战争的风险:“你能做到的唯一方法......”并不意味着建议,只是一个解决方案。语言上下文中唯一的解决方案是使用外部作用域(例如,全局作用域或某些其他命名空间)。但是,正如您所说,可以使用复杂的调试工具解除此限制;但这超出了语言本身的规范。 (2认同)

Eri*_*itz 13

为什么不做一个合适的暴露变量?

$(document).ready(function(){
    var foo=0;
    var bar = 3;

    $.exposed = {
        foo: foo,
        bar: bar
    }
});
Run Code Online (Sandbox Code Playgroud)

通过执行检查变量

console.log($.exposed.bar)
Run Code Online (Sandbox Code Playgroud)


Ste*_*fan 5

你不能因为它们处于封闭空间.这里解释了闭包是如何工作的(JavaScript闭包如何工作?).要访问变量,只需在$(document).ready函数内部设置断点即可