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ます!

そのコンテキスト内でのみアクセスする必要がある場合は、関数外で何も宣言しないでください。そして、他の方法でコードをデバッグしてみてください。たとえば、クロムを使用するconsole.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

実際、それを回避するためのハックな方法があります。おそらくそれを使うべきではありません。ブレークポイントを設定します。そうは言っても、コードは次のとおりです。

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