請看下面的代碼:如何在JavaScript中有條件地定義函數?
if (false) {
function foo() {
alert("FOO");
}
}
foo(); // alerts "FOO"
正如你所看到的,功能foo
定義並且即使在if
條件失敗的作品。
我想這樣做的原因是我正在開發InDesign的擴展,並且我製作了一個名爲utilities.jsx的腳本,其中包含在其他腳本中使用的各種功能。在需要這些功能的所有腳本,我簡單地使用:
app.doScript(File(scriptsFile.parent.fsName + "/t_utilities.jsx"), ScriptLanguage.JAVASCRIPT);
定義我需要的所有功能,然後我就可以使用它們。現在,由於這個腳本將被不同的文件以不可預知的順序多次調用(用戶決定),我想我可能只定義這些函數,如果它們之前沒有定義過(如果utilities.jsx還沒有運行) 。有點像在PHP中的require_once
。
我想的是類似於以下,但隨着功能的每次腳本運行時定義的不工作:`
var utilitiesHasRun;
if (utilitiesHasRun !== true) {
// define all the functions
// ...
utilitiesHasRun = true;
}
是否還有其他選擇嗎?
您的第一個代碼片段在技術上並不有效,因爲函數聲明不允許在塊內使用。它只能起作用,因爲所有主流瀏覽器都實現了ECMAScript規範的擴展來處理這種情況。 –
爲了繼續@ TimDown的評論,如果它是嚴格模式代碼的一部分,你的第一個片段實際上會拋出一個SyntaxError。 –