code: function createProgramFromScripts(
      gl, shaderScriptIds, opt_attribs, opt_locations, opt_errorCallback) {
    const progOptions = getProgramOptions(opt_attribs, opt_locations, opt_errorCallback);
    const shaders = [];
    for (let ii = 0; ii < shaderScriptIds.length; ++ii) {
      const shader = createShaderFromScript(
          gl, shaderScriptIds[ii], gl[defaultShaderType[ii]], progOptions.errorCallback);
      if (!shader) {
        return null;
      }
      shaders.push(shader);
    }
    return createProgram(gl, shaders, progOptions);
  }
docs: Creates a program from 2 script tags.
  
  NOTE: There are 4 signatures for this function
  
  twgl.createProgramFromScripts(gl, [vs, fs], opt_options);
  twgl.createProgramFromScripts(gl, [vs, fs], opt_errFunc);
  twgl.createProgramFromScripts(gl, [vs, fs], opt_attribs, opt_errFunc);
  twgl.createProgramFromScripts(gl, [vs, fs], opt_attribs, opt_locations, opt_errFunc);
  
  @param {WebGLRenderingContext} gl The WebGLRenderingContext
  to use.
  @param {string[]} shaderScriptIds Array of ids of the script
  tags for the shaders. The first is assumed to be the
  vertex shader, the second the fragment shader.
  @param {module:twgl.ProgramOptions|string[]|module:twgl.ErrorCallback} [opt_attribs] Options for the program or an array of attribs names or an error callback. Locations will be assigned by index if not passed in
  @param {number[]} [opt_locations|module:twgl.ErrorCallback] The locations for the. A parallel array to opt_attribs letting you assign locations or an error callback.
  @param {module:twgl.ErrorCallback} [opt_errorCallback] callback for errors. By default it just prints an error to the console
  on error. If you want something else pass an callback. It's passed an error message.
  @return {WebGLProgram?} the created program or null if error.
  @memberOf module:twgl/programs