# Script

执行用户定义的 JavaScript 源代码，该代码是使用编辑脚本对话框对话框创建和编辑的。Script 函数包含定义其行为的 JavaScript 源代码（可以保存并存储为 .js 文件）。源代码只定义了单个 Script 函数的行为。例如，如果作业中有多个 Script 函数，则一个 Script 函数中定义的变量将仅针对该特定 Script 函数定义，而不是针对作业中的所有 Script 函数定义。

注意:

- 以下限制适用于任何给定作业中使用的所有 Script 函数和外部脚本模块分配的内存：

  - 分配给脚本内存的最大字节数限制为 4MB。
  - 为堆栈分配的最大字节数限制为 64kB。
- 为避免不必要的内存分配，应从脚本中删除所有未使用的函数（例如默认示例脚本中的函数，如果不使用这些函数的话）。例如，包含生成字符串对象并绘制该对象的未使用样本绘制函数的脚本将消耗内存和 CPU 周期。

- 已声明为禁用其执行的脚本函数的功能与其他电子表格函数不同。通常，其他电子表格函数会保留该函数执行后记录的最后一个值。任何引用禁用函数的函数都将返回记录的最后一个值。但是，由于 Script 函数需要执行其内部的 run 方法，因此在加载禁用的 Script 函数时，它会显示 Script 数据结构，但任何引用它的 Get 函数将返回 #ERR，因为 Get 函数需要一个特定的返回值，而由于 Script 函数未执行，因此不会返回该值。

## Script 输入

与传统的 In-Sight 电子表格函数不同，Script 函数能够接受各种不同的输入参数（从 1 到 100）。每个参数必须是单元格引用、文字值或产生以下值类型之一的表达式：

- 数字
- 字符串
- 图像
- 事件
- 形状对象
- Binary 数据结构
- 数据结构，例如 斑点、边缘、直方图、 或 图案Vision Data Access functions
- Object 或 Array 数据结构（从另一个 Script 函数返回）

注意:

- 如果将单元格范围指定为参数，它将扩展到该范围中包含的单个单元格引用，因此将消耗与单元格区域中包含的相同数量的参数。
- 当脚本函数的参数是对返回 Blob、Edges、Histogram、 或 Patterns 数据结构的引用，传递给 Script 函数的对象仅在 Run 方法返回之前可用。Script 函数可以直接返回该对象，它可以作为包含 Script 函数的单元格的结果值。但是，如果脚本在内部存储此对象（例如在其 Draw 方法中使用它），则在 run 方法返回后，该对象将不可用，并且尝试调用其任何方法都会导致错误。如果脚本返回结果结构（例如 run 方法返回的脚本对象的属性），也会出现这种情况。例如，这些属性中的任何一个都不能被 Get 函数或其他 Script 函数使用，因为底层对象不再有效。

- 在编写脚本时，包括验证输入参数的代码可能有助于减少错误，如下例所示：

                              function Tool()
      {
      }

      module.exports = Tool;

      function isNumber(n) {
         if (n === undefined || n == null || isNaN(parseFloat(n)) || !isFinite(n))
            return false;
         return true;
      }

      Tool.prototype.run = function(x, y){
         if (!isNumber(x) || !isNumber(y))
            throw new Error("Usage: Requires 2 numeric arguments");
         return +x + +y;
      }

注意:访问区域对象的宽度或者高度脚本中的参数使用 .w 和 .H。

>     Script.prototype.run = function (image, myRegion) {

> >     return {
> >         x: myRegion.x,
> >         y: myRegion.y,
> >         //width: myRegion.width,
> >         //height: myRegion.height,
> >         width: myRegion.w,
> >         height: myRegion.h,
> >         angle: myRegion.angle,
> >         curve: myRegion.curve
> >     };

>     }

## Script 输出

返回 | 该函数可能会返回以下任何类型的值： 数字 true (1) 或 false (0) 字符串 Binary 数据结构 Blob、Edge、Histogram、 或 Patterns 数据结构 形状对象 对象 图像 null、undefined（未定义）或无返回语句（被视为与空对象相同）。 对于以下任何情况，该函数将返回 #ERR： 如果源代码不包含 run 方法。 如果任何参数值不是受支持的类型。 如果构造函数抛出异常。 注意:GetErrorString 函数可用于检索异常消息，如果将异常消息写入源代码中的话。所有异常都返回相同的错误代码 (20000005)。

## Script Vision Data Access functions

Get 函数用于访问由 Script 函数返回的对象的属性。