Search code examples
javascriptgoogle-apps-scriptclosuresglobal-variables

Google apps script - variable reset during iteration


I would expect global variable iii to increment but iii remains = 1 throughout until max stack size reached.

var iii = 1; //this is supposed to be global variable declaration in google apps script

function tryglobal() {
  for (iii = 1; iii < 100; iii++)  {
    console.log(iii);
    iii = iii*2;
    tryglobal();
  }
}

but iii always remain 1 till stack overflow in google apps script.

Why so? Is it due to processing of each iteration seperately?


Solution

  • Issue:

    The for-loop initialization expression resets iii to 1 on each recursion

    /*<ignore>*/console.config({maximize:false,timeStamps:false,autoScroll:false});/*</ignore>*/
    var iii=1; //this is supposed to be global variable declaration in google apps script
    
    function tryglobal() 
    {
    for (iii=1;iii<100;iii++) 
      {console.log(iii);
      iii=iii*2;
      tryglobal();
      }
    }
    tryglobal()
    <!-- https://meta.stackoverflow.com/a/375985/ -->    <script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>

    Solution:

    Avoid resetting iii to 1 in for() loop initializer

    /*<ignore>*/console.config({maximize:false,timeStamps:false,autoScroll:false});/*</ignore>*/
    var iii=1; //this is supposed to be global variable declaration in google apps script
    
    function tryglobal() 
    {
    for (;iii<100;iii++) 
      {console.log(iii);
      iii=iii*2;
      tryglobal();
      }
    }
    tryglobal()
    <!-- https://meta.stackoverflow.com/a/375985/ -->    <script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>

    References: