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

时间:2012-12-07 15:47:38

标签: javascript jquery console

如何访问

中的一些变量
$(document).ready(function(){
    var foo=0;
    var bar = 3;
});

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

8 个答案:

答案 0 :(得分:46)

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

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

答案 1 :(得分:16)

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

var foo, bar;

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

答案 2 :(得分:13)

为什么不做一个正确的公开变量?

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

    $.exposed = {
        foo: foo,
        bar: bar
    }
});

执行

检查变量
console.log($.exposed.bar)

答案 3 :(得分:5)

你不能因为它们处于封闭空间。 Here它解释了闭包的工作原理(How do JavaScript closures work?)。 要访问变量,只需在$(document).ready函数

中设置断点即可

答案 4 :(得分:3)

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

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

var myObj = {};

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

注意只有在加载文档后才能设置它们!因此,在alert(myObj.foo);区块生成$(function() { ... });后会立即undefined(或类似内容)!

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

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