2009-08-27 9 views
3

を宣言範囲は、問題のスクリプトです。ここインライン

function bar() { 
    devices_record = "assign new string"; 
} 

エラーレポート:

<script type="text/javascript"> 
    var devices_record = "some string"; 
</script> 
<script type="text/javascript" src="/js/foo.js"></script> 

これはfoo.jsはからですHttpFoxはdevices_レコードが定義されていないということです。何がありますか?私はdevices_recordがグローバルスコープの変数になると思ったので、どこからでもアクセスできるはずです。

+1

確実にdevices_recordにアクセスできるはずです。私はあなたが何か他のものを欠いていると思う。これは正確なコードですか、問題を説明するサンプルを作成していますか? – SolutionYogi

答えて

3

あなたのテストケースは私の仕事です。ここに私の完全なテストは次のとおりです。

foo.jsは:

function bar() { 
    alert(devices_record); 
    devices_record = "assign new string"; 
    alert(devices_record); 
} 

foo.htmlという:

<html> 
<head> 
    <script type="text/javascript"> 
    var devices_record = "some string"; 
    </script> 
    <script type="text/javascript" src="foo.js"></script> 
</head> 
<body onload="bar()"> 
</body> 

私は最初は"some string"言う2つのアラートを取得、二"assign new string"

問題はコードの他の場所にあります。

+0

あなたは正しいです。この問題はコード内のどこにも存在していました。ありがとうございました。 –

0

devices_recordfoo.jsを宣言します。次に、HTMLに埋め込まれたjavascriptから参照します。

また、フィールド/プロパティとしてdevices_recordで、クラスであなたのfoo.jsはコードをラップ検討することができます。これにより、とりわけエラートラッピングがはるかに簡単になります。

Tidbit:また、スクリプトインクルードの前にdevices_record宣言を置くと、スクリプトがそのスクリプトにアクセスできる可能性があります。しかし、それらを使用するファイルの外に変数を宣言することには注意が必要です。 devices_recordを宣言するのを忘れるページにそのスクリプトを含めることに決めた場合は、エラーが発生します。

1

私はあなたの与えられたコードが動作すると信じています。上記のコードを少なくとも実行してもエラーは発生しません。

さらに、インラインjを使用する前に、foo.jsなどの依存関係を含める方がよいでしょう。これにより、ライブラリが提供された関数を呼び出す前にライブラリがロードされます。

また、代入演算子で定義しているため、代入演算子で 'devices_record is not defined'エラーが発生することはありません。

あなたのエラーはおそらく他の原因によって発生している可能性があります。

+0

割り当てについての良い点。質問者がエラーを生成している実際のコードを省略していることを示します。 –