スコープの質問、ネストされた関数で変数が定義されていません

SallyRothroat

このget呼び出しを使用して、サーブレットからjsonマップを返します。var i = 0を作成します。データで返されたユーザーをカウントします。jsondata[i]返されたユーザーにアクセスするために、iを簡単に使用できます。しかし、以下では、クリックハンドラーのネストされた関数内で同じjsonとvarを使用しようとすると、undefinedが表示されます。私はここを見ました、そしてそれは言います:

各関数には独自のスコープがあり、その関数内で宣言された変数には、その関数とネストされた関数からのみアクセスできます。JavaScriptのローカルスコープは関数によって作成されるため、関数スコープとも呼ばれます。関数を別の関数内に配置すると、ネストされたスコープが作成されます。

では、なぜクリックハンドラーで未定義なのですか?に変更console.log(jsondata[i]);するconsole.log(jsondata[0]);と、未定義ではなく正しい情報が表示されます。

$.get("/lod1/Scuttlebutt",{name:"onload",data: -1},function(jsondata) {
    var numberofusers = jsondata.length;
    var i = 0;
    $(".mate").each(function(index) {
        //show
        $(this).css("display","block");
        //construct new id
        var mateid = 'mate'+jsondata[i][0].userid;
        //create ids for this mate
        $(this).attr('id',mateid+"MateContainer");
        $(this).find(".mateavatar").attr("id",mateid+"avatar");
        $(this).find("#matename").attr("id",mateid+"Name");
        $(this).find("#matepoints").attr("id",mateid+"Points");
        $(this).find("#matesensignia").attr("id",mateid+"Ensignia");
        $(this).find("#matebio").attr("id",mateid+"Bio");
        $(this).find("#matesets").attr("id",mateid+"Sets");
        $(this).find("#matebadges").attr("id",mateid+"Badges");
        //fill in correct info
        $(this).find("#"+mateid+"Name").text(jsondata[i][0].userName);
        $(this).find("#"+mateid+"Points").text(jsondata[i][0].points);
        $(this).find("#"+mateid+"Ensignia").attr('src',calculateEnsignia(jsondata[i][0].rank));

            //add onclick handler to username
            $(this).find("#"+mateid+"Name").on('click',function(){
                console.log(jsondata[i]);
                var num_tabs = $("div#tabmenu ul li").length + 1;

                $("div#tabmenu ul").append(
                    "<li><a href='#tab" + mateid + "'>" + jsondata[i][0].userName + "</a></li>"
                );
                $("div#tabmenu").append(
                    "<div id='tab" + mateid + "'> NEW TAB!</div>"
                );
                $("div#tabmenu").tabs("refresh");
            }); 
khaled Dehia

このコードは、クリックイベントの後にのみ機能します

console.log(jsondata [i])

あなたができること、あなたはあなたの行のインデックスを決定するために他の方法を使うことができますそしてあなたはあなたのデータを得るのにそれを使うことができます

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

関数スコープの問題-関数が定義されていません

分類Dev

外側のスコープで定義された変数が内側のスコープで定義されていません

分類Dev

スコープ ''から参照されるタイプ ''の変数 ''ですが、定義されていません

分類Dev

「スコープ ''から参照されるタイプ ''の変数 ''ですが、定義されていません」

分類Dev

変数がスコープで宣言されておらず、定義された関数を関数として使用することはできません

分類Dev

変数が定義されていません、変数のスコープがおかしい

分類Dev

setプロパティを使用してコンストラクター関数の実行コンテキストで定義された値を設定しても値が変更されない理由がわかりません

分類Dev

グローバル変数は関数スコープ内で定義されていません

分類Dev

Vue.jsにネストされたコンポーネント:コンポーネントのマウントに失敗しました:テンプレートまたはレンダリング関数が定義されていません

分類Dev

これは太い矢印関数では定義されていませんが、囲んでいるスコープで定義されています

分類Dev

スコープ ''から参照されたタイプ 'SubType'の変数 'x.Sub'ですが、定義されていませんエラー

分類Dev

コンストラクターに設定された変数が別のメソッドで定義されていません

分類Dev

アンダースコアテンプレートUncaughtReferenceError変数が定義されていません

分類Dev

EntityFrameworkCore Linqエラー:スコープ ''から参照されているタイプ 'Country'の変数 'country.Country'ですが、定義されていません

分類Dev

変数が関数で定義されていません

分類Dev

関数内で変数が定義されていません

分類Dev

外側のスコープで定義されたローカル変数は最終的または実質的に最終的でなければなりません

分類Dev

ソースコードのjavascript関数ですが、「定義されていません」

分類Dev

エラー:レンダリング関数またはテンプレートがコンポーネントで定義されていません:匿名

分類Dev

スコープから参照されているタイプの変数ですが、定義されていません

分類Dev

スコープ外の場合は変数が定義されていません

分類Dev

スコープ ''から参照されるタイプ 'System.Boolean'の "変数 ''ですが、式で定義されていません"

分類Dev

列挙型のMoqサブプロパティ:スコープ ''から参照される 'xxx'型の変数 'x'ですが、定義されていません

分類Dev

Firebase関数のHTTPトリガー-エラー:リクエストを処理できませんでした-Firebaseが定義されていません

分類Dev

React関数コンポーネントでcontextTypeが定義されていません

分類Dev

インポートされた変数が定義されていません

分類Dev

Angular 2コンポーネントのグローバル変数が定義されていませんか?

分類Dev

複数のループがあるリスト内包で名前が定義されていません

分類Dev

moongoose関数NODEJSの外部で変数IDが定義されていません

Related 関連記事

  1. 1

    関数スコープの問題-関数が定義されていません

  2. 2

    外側のスコープで定義された変数が内側のスコープで定義されていません

  3. 3

    スコープ ''から参照されるタイプ ''の変数 ''ですが、定義されていません

  4. 4

    「スコープ ''から参照されるタイプ ''の変数 ''ですが、定義されていません」

  5. 5

    変数がスコープで宣言されておらず、定義された関数を関数として使用することはできません

  6. 6

    変数が定義されていません、変数のスコープがおかしい

  7. 7

    setプロパティを使用してコンストラクター関数の実行コンテキストで定義された値を設定しても値が変更されない理由がわかりません

  8. 8

    グローバル変数は関数スコープ内で定義されていません

  9. 9

    Vue.jsにネストされたコンポーネント:コンポーネントのマウントに失敗しました:テンプレートまたはレンダリング関数が定義されていません

  10. 10

    これは太い矢印関数では定義されていませんが、囲んでいるスコープで定義されています

  11. 11

    スコープ ''から参照されたタイプ 'SubType'の変数 'x.Sub'ですが、定義されていませんエラー

  12. 12

    コンストラクターに設定された変数が別のメソッドで定義されていません

  13. 13

    アンダースコアテンプレートUncaughtReferenceError変数が定義されていません

  14. 14

    EntityFrameworkCore Linqエラー:スコープ ''から参照されているタイプ 'Country'の変数 'country.Country'ですが、定義されていません

  15. 15

    変数が関数で定義されていません

  16. 16

    関数内で変数が定義されていません

  17. 17

    外側のスコープで定義されたローカル変数は最終的または実質的に最終的でなければなりません

  18. 18

    ソースコードのjavascript関数ですが、「定義されていません」

  19. 19

    エラー:レンダリング関数またはテンプレートがコンポーネントで定義されていません:匿名

  20. 20

    スコープから参照されているタイプの変数ですが、定義されていません

  21. 21

    スコープ外の場合は変数が定義されていません

  22. 22

    スコープ ''から参照されるタイプ 'System.Boolean'の "変数 ''ですが、式で定義されていません"

  23. 23

    列挙型のMoqサブプロパティ:スコープ ''から参照される 'xxx'型の変数 'x'ですが、定義されていません

  24. 24

    Firebase関数のHTTPトリガー-エラー:リクエストを処理できませんでした-Firebaseが定義されていません

  25. 25

    React関数コンポーネントでcontextTypeが定義されていません

  26. 26

    インポートされた変数が定義されていません

  27. 27

    Angular 2コンポーネントのグローバル変数が定義されていませんか?

  28. 28

    複数のループがあるリスト内包で名前が定義されていません

  29. 29

    moongoose関数NODEJSの外部で変数IDが定義されていません

ホットタグ

アーカイブ