1

私はこの問題に頻繁に遭遇し、最終的に説明を求めたいと思いました. 私は Google Chrome を持っており、javascript コンソールを頻繁に使用しています。グローバル変数を宣言すると、いつでもコンソールでそのコンテンツにアクセスできますが、スクリプトがブラウザーで実行されているときに関数内から変数にアクセスしようとすると、「未定義のプロパティ 'top' を読み取れません」というタイプのエラーが発生することがよくあります。 .

ここにコードを貼り付けます。このエラーが発生する理由を誰かが説明してくれたら、とてもありがたいです!

// JavaScript Document
var myglobalvariable;
// ...

$(document).ready( function() {
  myglobalvariable = document.getElementsByTagName("article");
  // ...
});

function myFunction() {
  for (i in myglobalvariable) {
    mylocalvariable_top = myglobalvariable[i].style.top; // Error points to this line
  // ...
  }
}

myFunction は通常、イベント ハンドラーによって呼び出され、上記のエラーを報告します。

4

3 に答える 3

0

あなたがしていることはあなたが望んでいるものではないと思います。

for (i in myglobalvariable) { }

これは配列内のアイテムをループするのではなく、オブジェクトのキー/プロパティ名をループします。

myglobalvariable[i]

上記で、そのキーを持つプロパティのタイプにアクセスします。

myglobalvariable[i].style.top

上記のオブジェクトのスタイル プロパティにアクセスします。そのオブジェクトにスタイル プロパティがない場合、これは未定義になります。つまり、存在しないプロパティで .top を呼び出すと、「未定義のプロパティ 'top' を読み取れません」というメッセージが表示されます。

ここで提示しているのは特定の問題であり、一般的な「グローバル スコープの誤解」ではありません。

解決

var i, len = myglobalvariable.length;
for (i = 0; i < len; i++) {
    if (myglobalvariable[i].style)
        mylocalvariable_top = myglobalvariable[i].style.top;
  // ...
}
于 2013-04-22T15:11:17.913 に答える