1. ホーム
  2. javascript

[解決済み] 変数」は定義される前に使用されていた

2022-03-04 08:10:29

質問

ある変数が定義されているかどうかをチェックし、明示的に定義されていない場合は、その変数を定義することにしています。

if ( typeof(aVariable) == 'undefined' ) {
  var aVariable = value;
}

変数が定義されていないため、JSLintは定義される前に使用されていると警告しています。

これを克服するにはどうしたらよいでしょうか。

このような変数を明示的に定義できるようにしたいのですが。

<script>
  var aVariable = value;
</script>
<script src="myScript.js"></script>

そのため、このスクリプトを組み込む人は誰でもいくつかのプロパティをカスタマイズすることができます。そして、このロジックはすでに何百ものウェブサイトで使われているので、残念ながら私は変更することができません。

回答/解決策は下にスクロールしてください。なぜなら、私は自分自身の質問に答えたので、Stack Overflowはそれを表示しないからです。お見逃しなく。

解決方法は?

JSLintのメーリングリストにもっと納得のいく回答がありましたので、Boldewynさんには申し訳ないですが :)

解決策1

IEでは、スクリプトレベル(ファイル単位、またはスクリプトブロック単位)で var"宣言は、解析段階(実行前)において、リセットされます。 がすでに存在する場合は、その変数の値。

だから、単純にこうするのがベターでしょう。

/*global foo: true */
if (typeof foo === "undefined") {
foo = "some value";
}

var" を宣言せず、単に foo を代入することで、foo は自動的に グローバルスコープ

解決策2(特殊なケース)

明示的に設定された変数が0またはfalseでない場合

var foo = foo || "some value";