You need to enable JavaScript to run this app. Google Side Bar服务端JS全局变量是否会在多次调用间共享?
优惠活动
大模型
产品
解决方案
定价
更多

Google Side Bar服务端JS全局变量是否会在多次调用间共享?

问题1:该隔离表现是否是确定性的?

在Google Apps Script(Google Side Bar服务端脚本的运行环境)中,这个表现是100%确定的。

  • 你观察到的公共变量不共享的核心原因是GAS的执行实例隔离机制:每一次来自客户端的函数调用请求,都会被分配到独立的沙箱执行上下文,全局作用域的变量会在每个上下文初始化时重新创建,请求处理完成后上下文就会被销毁,不同请求之间完全不会共享全局变量状态。
  • 你提到的10秒等待并发场景只是让这个特性表现得更明显,不是核心诱因:哪怕你等待getfirstCall完全返回后再调用getsecondCall,后者拿到的依然是只有Item2的数组,前一次请求对publicArr的修改会随着前一个执行实例销毁完全丢失。
  • 如果需要在多次请求之间共享数据,必须使用GAS提供的持久化/缓存能力:比如PropertiesService存储配置、CacheService做临时缓存、或者将数据写入关联的表格/文档中。

问题2:该特性是否属于Web开发通用基础规则?

不是,这是GAS这个特定运行环境的设计,不属于通用规则。

  • 不同服务端运行环境的上下文隔离策略差异极大:
    • 类似Node.js、Python Django/Flask(常驻进程模式)这类环境,全局变量是整个进程共享的,所有请求都会读写同一个全局变量,你这段代码在Node.js服务中运行的话,两次调用返回的数组都会同时包含Item1和Item2。
    • 类似PHP、传统CGI这类环境,每次请求都会启动独立的进程/上下文,请求结束后销毁,全局变量也不会共享,和GAS的表现一致。
  • 所以全局变量是否跨请求共享,完全取决于你用的服务端运行环境的设计,没有统一的通用规则。

你提供的示例代码参考:

const publicArr = [];

function doWait2(ms){
   var start = new Date().getTime();
   var end = start;
                 
    while(end < start + ms) {
       end = new Date().getTime();
   }
}

function getfirstCall(){
    publicArr.push("Item1");
    doWait2(10000);
    return publicArr;
}

function getsecondCall(){
    publicArr.push("Item2");
    return publicArr;
}

内容的提问来源于stack exchange,提问作者OJNSim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 15:06:08