次のスクリプトを検討してください。
if (false) {
function foo() {
alert("FOO");
}
}
foo(); // alerts "FOO"
ご覧のとおり、関数foo
は定義されており、 の条件がif
失敗しても機能します。
これを行う理由は、InDesign の拡張機能を開発していて、他のスクリプトで使用されるさまざまな機能を保持する utility.jsx というスクリプトを作成したためです。これらの関数を必要とするすべてのスクリプトで、私は単純に次を使用します。
app.doScript(File(scriptsFile.parent.fsName + "/t_utilities.jsx"), ScriptLanguage.JAVASCRIPT);
これにより、必要なすべての関数が定義され、それらを使用できるようになります。さて、このスクリプトはさまざまなファイルによって予測不可能な順序 (ユーザーが決定) で複数回呼び出されるため、以前に関数が定義されていない場合 (utilities.jsx がまだ実行されていない場合) にのみ関数を定義できると考えました。 . require_once
phpのようなものです。
次のようなことを考えていましたが、スクリプトが実行されるたびに関数が定義されるため、機能しません:`
var utilitiesHasRun;
if (utilitiesHasRun !== true) {
// define all the functions
// ...
utilitiesHasRun = true;
}
他のオプションはありますか?