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

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

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

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

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

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

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

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

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

 $(document).ready(function(){ var foo=0; var bar = 3; $.exposed = { foo: foo, bar: bar } }); 

通过执行检查变量

 console.log($.exposed.bar) 

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

如果您确实需要从代码的不同部分访问这些变量(例如,在文档就绪时初始化它们,然后在其他地方访问它们),那么您必须在函数闭包之外声明它们。

当且仅当情况确实如此时,我并不喜欢混乱全球空间。 我建议你使用一个基础对象:

 var myObj = {}; $(function() { myObj.foo = 0; myObj.bar = 3; }); 

请注意 ,只有在加载文档后才会设置它们! 因此alert(myObj.foo); (或类似的东西)紧跟在$(function() { ... }); 块将产生undefined

如果您只需要在该上下文中访问它们,则不要在函数外部声明任何内容。 并尝试使用其他方法调试您的代码。 例如,使用chrome, console.log非常有用。

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

您将这些变量暴露在全局范围内(真的不建议)

在$(document).ready()之外定义它们,然后在内部访问它们。

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

实际上围绕它有一种hackish方式。 你可能不应该使用它。 设置断点。 话虽这么说,这是代码:

 $(document).ready( readyClosure = function(access){ var x = 5; return eval(access); } ); readyClosure('x'); // returns 5