こんにちは.
以下のプログラム①,②を実行すると, どちらもディスプレイに以下のように出力されます.
①↓
gs
1function doGet(){ 2 return HtmlService.createHtmlOutputFromFile("hello"); 3} 4 5var closerRe = function (){ 6 var b = 0; 7 return function(plusOr){ 8 Logger.log("plusor = " + plusOr); 9 if (plusOr == 1){ 10 ++b; 11 } 12 return b; 13 }; 14}(); 15 16function closer(x){ 17 var tmp = closerRe(x); 18 Logger.log("tmp = " + tmp); 19 return tmp; 20}
②↓
gs
1function doGet() { 2 return HtmlService.createTemplateFromFile("hello").evaluate(); // テンプレートオブジェクトの取得 3} 4 5var closer = function closer(){ 6 var b = 0; 7 return function(plusOr){ 8 Logger.log("plusor = " + plusOr); 9 if (plusOr == 1){ 10 ++b; 11 } 12 return b; 13 }; 14}();
①, ②に共通のhtmlファイル
html
1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 </head> 6 <body> 7 <p id="wi"></p> 8 <script> 9 var count = 0; 10 11 function success(get){ 12 ++count; 13 document.getElementById("wi").insertAdjacentHTML("afterend","<p>get = " + get + ", count = " + count + "</p>"); 14 if (count < 4){ // aaを4回呼ぶ 15 aa(1); 16 } 17 } 18 19 aa(1); 20 21 function aa(vv){ 22 google.script.run.withSuccessHandler(success).closer(vv); // 同じ実引数でcloserを呼ぶ 23 } 24 </script> 25 </body> 26</html> 27 28 29
display
1get = 1, count = 4 2 3get = 1, count = 3 4 5get = 1, count = 2 6 7get = 1, count = 1
質問 : gsファイル内の関数はhtmlから呼び出される度に定義されているのでしょうか.(gsファイル内のクロージャをhtmlから利用することはできないのでしょうか)
宜しくお願い致します.
追記①
stackoverflowでも質問しました.
Definition of gs function is when you call the function from html code?
追記②
①の場合, クライアント側からcloser関数を呼び出した時を考えると, closer関数実行中にcloserRe関数の呼び出しに出会ったときに,closerRe関数が定義されるのでしょうか.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/19 04:18
2019/12/19 07:47
2019/12/25 09:40 編集