24

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

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

从谷歌浏览器控制台?如果我尝试 alert(foo),我会收到一条消息,指出它没有定义。

4

8 回答 8

51

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

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

于 2012-12-07T15:51:02.530 回答
18

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

var foo, bar;

$(document).ready(function(){
    foo = 0;
    bar = 3;
});
于 2012-12-07T15:49:37.813 回答
17

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

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

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

通过执行检查您的变量

console.log($.exposed.bar)
于 2015-04-08T12:14:22.717 回答
5

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

于 2012-12-07T15:50:23.450 回答
4

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

当且仅当情况如此时,我不喜欢弄乱全局空间。我建议您为此使用基础对象:

var myObj = {};

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

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

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

于 2012-12-07T15:52:24.747 回答
2
$(document).ready(function(){
    window.foo=0;
    window.bar = 3;
});

您将这些变量公开到全局范围内(真的不建议)

于 2012-12-07T15:49:49.660 回答
1

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

var foo = 0, bar = 3;
$(document).ready(function(){
    alert(foo);
});
于 2012-12-07T15:50:15.800 回答
0

实际上有一个hackish方法。您可能不应该使用它。设置断点。话虽如此,这是代码:

$(document).ready(
    readyClosure = function(access){
        var x = 5; 
        return eval(access);
    }
);
readyClosure('x'); // returns 5
于 2014-03-01T12:09:26.187 回答