過去に書いた名前付き関数式で定義されたグローバル関数からはクロージャが使えないからの関連で。
参照先オブジェクトが属するスコープから抜ける前なら(クロージャとしての定義時の環境ではなく実行時の環境として)、名前付き関数式のブロック内から参照することは出来ます。
(function () {
(function () {
function common_load () {
void function x () { alert (typeof common_load); };
};
common_load ();
x (); // function (まだ生きている)
}) ();
x (); // undefined (スコープを抜けたので消失)
}) ();
Dorothy2 の Dorothy2A.dms では OnHttpRequest()
内で common_load()
が定義されていて、実行終了まで OnHttpRequest()
を抜けないので、common_load()
で実行したスクリプトで名前付き関数式によって定義された関数内からも common_load()
を呼び出せる、という挙動のようです。
あと名前付き関数式でなくて無名の関数式(を変数に代入したもの)でもスコープ抜けたら参照できなくなります。