どうも!chuckです。
JSのプラグインを開発しましたので、改修します。
今回追加するポイントは、「カプセル化」であります。
つまり、処理文を関数で包みます。それによって、外部に悪い影響を与えないようにします。
まず、こちらが以前のコード。
いきなりvar で始まってますね。
これではグローバル汚染が起こっています。
グローバル汚染についてはこの記事が分かりやすかったです。
なので、処理の全文を即時関数で包みます。
シンプルな例を出すとこんな感じ。
こうすることで、testという名前の変数がグローバル変数ではなくローカル変数となります。
ただし、これでは外部からアクセスできないので、1つ工夫を加えます。
4行目では、windowを即時関数の引数としてとっています。
それを1行目でwと置くことで、この関数内でwindowオブジェクトをwとして使うことができます。
そして3行目でw.test = test とすることで、windowオブジェクトにtestという名前で変数testを追加しています。
こうすることで、外部からも参照することができます。
さて、僕のコードはこうなりました。
処理全体を即時関数で包み込んで、
引数にwindowオブジェクトを渡しています。
そして、作成したcnvという変数を、以下の処理でwindowに追加しています。
w.cnv === undefined は、まだcnvというプロパティが存在していないことを確認しています。
これで、外部からもこの関数を呼び出せるようになりました。
ただし、cnvという関数が呼んでいるhasDataや、showResultという関数はローカルとなり、外部からは隠されています。
というわけで、今回は即時関数を利用して、このプラグインによるグローバル汚染を防ぎました。
書いたコード