gpt4 book ai didi

javascript - gs 函数的定义是从 html 代码调用该函数时?

转载 作者:行者123 更新时间:2023-11-30 10:57:33 24 4
gpt4 key购买 nike

我正在使用 gs 文件和 html 包含脚本标记和 jQuery 创建 gas web 应用程序。当我执行下面的程序①或②时,①、②中的浏览器都会显示③。

①↓

function doGet(){
return HtmlService.createHtmlOutputFromFile("hello");
}

var closerRe = function (){
var b = 0;
return function(plusOr){
Logger.log("plusor = " + plusOr);
if (plusOr == 1){
++b;
}
return b;
};
}();

function closer(x){
var tmp = closerRe(x);
Logger.log("tmp = " + tmp);
return tmp;
}

②↓

function doGet() {
return HtmlService.createTemplateFromFile("hello").evaluate();
}

var closer = function closer(){
var b = 0;
return function(plusOr){
Logger.log("plusor = " + plusOr);
if (plusOr == 1){
++b;
}
return b;
};
}();

下面是①和②共同使用的html文件

<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<p id="wi"></p>
<script>
var count = 0;

function success(get){
++count;
document.getElementById("wi").insertAdjacentHTML("afterend","<p>get = " + get + ", count = " + count + "</p>");
if (count < 4){
aa(1);
}
}

aa(1);

function aa(vv){
google.script.run.withSuccessHandler(success).closer(vv);
}
</script>
</body>
</html>

③ : 这里显示在浏览器上

get = 1, count = 4

get = 1, count = 3

get = 1, count = 2

get = 1, count = 1

问题:gs函数的定义是在html代码中调用函数的时候? (我可以在 html 的 gs 文件中使用 closer 吗?)

谢谢。


后记①

我希望“get =”和“count =”值在浏览器上显示相同。 with using closer function of JavaScript in gs file(换句话说,使用我在①和②中写的“closer”名称函数)

最佳答案

  • 您想检索以下结果。

    get = 4, count = 4

    get = 3, count = 3

    get = 2, count = 2

    get = 1, count = 1

如果我的理解是正确的,这个修改怎么样?请将此视为几个可能的答案之一。

修改点:

  • 关于 closer() ,

    • 由于没有参数,无法接收该值。
    • 仅当 plusOr1 , ++b正在运行。
  • 关于 success()

    • vv的初始值是1 .因此,当反射(reflect)上述修改时,在第一个循环中,getsuccess(get)2 .
    • if (count < 4){aa(1);} 的 if 语句中, 1始终发送。

当上述修改反射(reflect)到您的脚本中时,它变成如下。

修改后的脚本:

对于Google Apps Script,请修改如下。

对于模式 1:

从:
var closerRe = function (){
var b = 0;
return function(plusOr){
Logger.log("plusor = " + plusOr);
if (plusOr == 1){
++b;
}
return b;
};
}();
到:
var closerRe = function (x){
var b = x;
return function(plusOr){
Logger.log("plusor = " + plusOr);
++b;
return b;
}(x);
};

对于模式 2:

从:
var closer = function closer(){
var b = 0;
return function(plusOr){
Logger.log("plusor = " + plusOr);
if (plusOr == 1){
++b;
}
return b;
};
}();
到:
var closer = function closer(x){
var b = x;
return function(plusOr){
Logger.log("plusor = " + plusOr);
++b;
return b;
}(x);
};

对于HTML,请修改success()函数中的脚本如下。

来自:

document.getElementById("wi").insertAdjacentHTML("afterend","<p>get = " + get + ", count = " + count + "</p>");
if (count < 4){
aa(1);
}

收件人:

document.getElementById("wi").insertAdjacentHTML("afterend","<p>get = " + (get - 1) + ", count = " + count + "</p>"); // modified
if (count < 4){
aa(get); // modified
}

注意事项:

  • 我认为在你的情况下,作为一个简单的脚本,你也可以使用 function closer(x){return ++x}而不是上面修改的closer() .

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

添加:

以下附加脚本使用 Properties 服务。

Google Apps 脚本端:

function doGet(){
return HtmlService.createHtmlOutputFromFile("hello");
}

function clearProperty() {
PropertiesService.getScriptProperties().deleteProperty("b");
}

var closerRe = function (){
var prop = PropertiesService.getScriptProperties();
var value = prop.getProperty("b");
var b = value ? Number(value) : 0;
return function(plusOr){
Logger.log("plusor = " + plusOr);
if (plusOr == 1){
++b;
prop.setProperty("b", b);
}
return b;
};
}();

function closer(x){
var tmp = closerRe(x);
Logger.log("tmp = " + tmp);
return tmp;
}

HTML 端:

<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<p id="wi"></p>
<script>
var count = 0;

function success(get){
++count;
document.getElementById("wi").insertAdjacentHTML("afterend","<p>get = " + get + ", count = " + count + "</p>");
if (count < 4){
aa(1);
} else {
google.script.run.clearProperty();
}
}

aa(1);

function aa(vv){
google.script.run.withSuccessHandler(success).closer(vv);
}
</script>
</body>
</html>

引用资料:

关于javascript - gs 函数的定义是从 html 代码调用该函数时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59385203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com