0

そのように始まる多くのコードを見ました

var a=a||{};

これで、存在するかどうかを確認できることがわかりました。

私の質問は、コードの最初にある場合、なぜそれをチェックするのですか?

つまり、プログラマーは a が存在しないことを知っています。

4

4 に答える 4

2

プログラマー、変数が存在するかどうかを知る必要があります。

スクリプトのどの部分が最初にロードされるかを追跡する必要なく、スクリプトのさまざまな部分をマッシュアップするために使用されます。いくつかのスクリプトは、最初に同じコード部分を持つため、同じ変数を共有します。

最初のスクリプトでは、変数が宣言され、以前の値がないため、その{}値が使用されます。

それを使用する次のスクリプトではvar、変数が既に宣言されているため無視され、変数の以前に設定された値が使用されます。

もちろん、複数の場所で同じ変数を宣言すると、コードの匂いがします。できれば、宣言を 1 回だけ行うように、何を行っているかを追跡する必要があります。

于 2012-11-19T08:57:36.260 に答える
1

より明確なコードに変換

var a; // The variable declaration gets brought up because of hoisting

吊り下げについて詳しくはこちら

if( a ) {
    a = a; // if a is a truthy value then assign it to itself
} else {
    a = {}; // if a is a falsy value then set the default to an empty object
}

それが役立つことを願っています

于 2012-11-19T09:22:36.827 に答える
0

これは、デフォルト値(この場合は{})にフォールバックするためのショートカットです。

于 2012-11-19T08:53:31.140 に答える
0

基本的に、javascript は複数のファイルに記述でき、各ファイル内で複数の宣言と関数を定義できます。

プログラマーが特定のインスタンスについて変数が存在するかどうかを知っていたとしても、このコードが別の場所から呼び出されたときに既に存在しているかどうかを知る方法はありません。

これは、適切に記述されたコード (すべて 1 つの開発者/ハウスから) では発生しないはずですが、js コードが複数の場所から融合されているプロジェクトでは発生します。

This SO questionには、javascript の変数スコープに関する非常に優れた回答があり、疑問が明確になるはずです。

于 2012-11-19T09:02:37.427 に答える