web-dev-qa-db-ja.com

$(document).ready関数にローカルなJavascript変数へのコンソールアクセス

内部のいくつかの変数にどのようにアクセスできますか

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

googleからchrome console?alert(foo)を試すと、定義されていないというメッセージが表示されます。

19
Mircea Voivod

デバッガーでブレークポイントを設定します。デバッガーが停止すると、それらに完全にアクセスできます。

それらをグローバルスコープに入れるように指示する他の回答は不適切です。適切なツールの使い方がわからないからといって、悪い習慣を使わないでください。

46

これらの変数は関数クロージャ内で定義されているため、アクセスできません。あなたがそれをすることができる唯一の方法は、あなたがあなたの関数のスコープの外でそれらへのグローバルな参照をした場合です。

var foo, bar;

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

適切な公開変数を実行しないのはなぜですか?

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

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

変数を確認するには

console.log($.exposed.bar)
13
Eric Herlitz

閉鎖スペースにいるのでできません。 ここ クロージャの仕組みを説明します( JavaScriptクロージャはどのように機能しますか? )。変数にアクセスするには、$(document).ready関数内にブレークポイントを設定するだけです

5
Stefan

reallyがコードのさまざまな部分からこれらの変数にアクセスする必要がある場合(たとえば、ドキュメントで初期化してから、他の場所にアクセスするなど)、次にそれらを関数クロージャの外で宣言する必要があります。

そうである場合にのみ、私はグローバルスペースを雑然とするのが好きではありません。そのためにベースオブジェクトを使用することをお勧めします:

_var myObj = {};

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

これらは、ドキュメントが読み込まれたときにのみ設定されます!したがって、alert(myObj.foo);ブロックの直後に$(function() { ... });(または類似の何か)を配置すると、undefined

そのコンテキスト内でのみアクセスする必要がある場合は、しないでください関数の外部で何かを宣言します。そして、他の方法でコードをデバッグしてみてください。たとえば、Chromeでは_console.log_は非常に役立ちます。

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

これらの変数をグローバルスコープに公開します(実際には推奨されません)

0
Vytautas Butkus

$(document).ready()の外でそれらを定義してから、それらの内部にもアクセスします。

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

実際にはハックな方法があります。おそらく使用しないでください。ブレークポイントを設定します。そうは言っても、ここにコードがあります:

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