3

問題のスクリプトは次のとおりです。

これは HTML ファイルからのものです。

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

これは foo.js からのものです:

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

HttpFox によるエラー レポートは、devices_record が定義されていないというものです。何を与える?devices_record はグローバル スコープの変数になるので、どこからでもアクセスできると思いました。

4

3 に答える 3

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>

2 つのアラートが表示されます。1 つ目は"some string"、 2 つ目は"assign new string"です。

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

于 2009-08-27T18:17:07.073 に答える
1

指定されたコードが機能すると思います。少なくとも上記のコードを実行しても、エラーは発生しません。

また、インライン js を使用する前に、foo.js などの依存関係を含めることをお勧めします。これにより、ライブラリが提供する関数を呼び出す前に、ライブラリが確実にロードされます。

また、代入演算子を使用して定義しているため、代入演算子によって「devices_record is not defined」エラーが発生することはありません。

あなたのエラーはおそらく他の何かが原因です。

于 2009-08-27T18:14:21.247 に答える
0

foo.jsdevices_recordを宣言します。次に、HTML に埋め込まれた JavaScript から参照します。

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

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

于 2009-08-27T18:09:09.650 に答える