Подтвердить что ты не робот

Консольный доступ к переменным Javascript, локальным для функции $(document).ready

Как я могу получить доступ к некоторым переменным внутри

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

с консоли Google Chrome? Если я попробую оповестить (foo), я получу сообщение, что оно не определено.

4b9b3361

Ответ 1

Поместите точку останова с помощью отладчика. Вы получите полный доступ к ним, когда отладчик остановится.

Другие ответы, говорящие вам о том, чтобы помещать их в глобальную область, плохие. Не используйте плохие методы только потому, что вы не знаете, как использовать нужные инструменты.

Ответ 2

Вы не можете получить доступ к этим переменным, потому что они определены в функциональном закрытии. Единственный способ сделать это - сделать глобальную ссылку на них вне области вашей функции.

var foo, bar;

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

Ответ 3

Почему бы не сделать правильную переменную экспонирования?

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

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

Проверьте свои переменные, выполнив

console.log($.exposed.bar)

Ответ 4

Вы не можете, так как они находятся в закрытом пространстве. Здесь объясняется, как работает закрытие (Как работают блокировки JavaScript?). Чтобы получить доступ к переменной, просто установите точку останова внутри функции $(document).ready

Ответ 5

Если вам действительно нужно получить доступ к этим переменным из разных частей вашего кода (инициализируйте их на готовом документе, а затем, например, обращаясь к ним в другом месте), вы должны объявить их вне закрытия функции.

Если и только если это так, я не поклонник загромождения глобального пространства. Я предлагаю вам использовать для этого базовый объект:

var myObj = {};

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

Обратите внимание, что они будут установлены только после загрузки документа! Поэтому alert(myObj.foo); (или что-то подобное) место сразу после блока $(function() { ... }); даст undefined!

Если вам нужен только доступ к ним внутри этого контекста, тогда не объявляйте ничего вне функции. И попробуйте отладить ваш код другими способами. Например, с хром console.log весьма полезен.

Ответ 6

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

Вы публикуете эти vars в глобальном масштабе (действительно не рекомендуется)

Ответ 7

определяют их вне $(document).ready(), а затем также получают доступ к ним внутри.

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

Ответ 8

На самом деле есть хакерский подход. Вероятно, вы не должны его использовать. Установите точку останова. При этом здесь код:

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