English help on website



影響の及ぶ範囲(Ver9.35対応版)
目次JavaScript対応− 影響の及ぶ範囲
ファイルごとにグローバルで再利用
同じファイルを開いているとき、スクリプトで実行済みのオブジェクト等が保持され、再利用できます。
execmacroとは違い、execjsで外部のjsファイルを実行する場合も、同じ空間になります。
例えばexecjsで外部のjsでオブジェクトや関数を定義しておくと、execjsから帰った後も、マクロが終了した後も、再度マクロを実行するときに再利用できます。
jsmode文によるスクリプトエンジンやグローバルの指定が異なる場合は、別の空間になります。

ローカルにする方法
jsmode "";とすると次に実行するjs{}がリセットされます。ただしWebView2を使う場合はリセットするたびに遅いです。
保持されたオブジェクト等を残したまま、実行したそのときだけの一時的な変数にするには、関数内にvarで記述するとできます。
ただし関数名を付けるとそれもグローバルに残ってしまうので、無名の関数定義と実行を同時にする (function(){ …… }()); といった書き方の常套手段があり、それが使えます。
WebView2の場合は、letで記述するだけでできます。
jsmode "";
js{
  a = "Temp";
}

js{
  main();
  function main() {
    var a = "temp";
  }
}
//これだとmainが残る
js{
  (function(){
    var a = "temp";
  }());
}
jsmode "WebView2";
js{
  let a ="temp";
}
他の秀丸エディタへの切り替えは不可
js{...}の実行中は、他の秀丸エディタへの切り替えは一切できません。
新しい秀丸エディタが起動することが起きても、マクロの実行は元の秀丸エディタのままです。
他の秀丸エディタに切り替える場合は、js{}の外で従来通りのマクロで行ってください。jsmodeの指定も改めて行う必要があります。
js{
  message("a");    
}

newfile;

js{
  message("b");    
}
endmacro;
jsmode "WebView2";
js{
  message("a");    
}

newfile;

jsmode "WebView2";
js{
  message("b");    
}
endmacro;

参考:
 影響の及ぶ範囲(execmacro)
 影響の及ぶ範囲(アクティブ切り替え)
 影響の及ぶ範囲(JavaScript)