## SetGlobalObject

### Introduced

v5.1

### Description

SetGlobalObject is similar to SetGlobal but it can be used to store JScript arrays and other objects. Data stored with this command can be retrieved using GetGlobal.
The object is stored "by-ref" so that any later changes to the content of the object are visible to any caller who retrieves the global variable.

### Scripting Syntax

    SetGlobalObject( in_VariableName, in_Value );

### Parameters

Parameter | Type | Description
--- | --- | ---
in_VariableName | String | The name of the global variable
in_Value | Variant | Object that will be the value of the global variable

### Examples

#### 1. JScript Example

    /*
            SetGlobal with a JScript array will result in a VBArray.  This is good if
            you want to pass data between JScript and VBScript, but otherwise use
            SetGlobalObject instead
    */
    var jsa = [1,2,3] ;
    SetGlobal( "JSArrayToVB", jsa ) ;
    var vba = GetGlobal( "JSArrayToVB" ) ;
    Application.LogMessage( "Contents of VBArray: " + VBArray( vba ).toArray().toString() ) ;
    SetGlobalObject( "JSArray", jsa ) ;
    var jsa2 = GetGlobal( "JSArray" ) ;
    Application.LogMessage( "Contents of JArray: " + jsa2.toString() ) ;
    // Expected output
    //INFO : Contents of VBArray: 1,2,3
    //INFO : Contents of JArray: 1,2,3

#### 2. JScript Example

    /*
            This example demonstrates the difference between SetGlobal and SetGlobalObject
    */
    var myobj = new Object() ;
    myobj.foo = 5 ;
    myobj.bar = "some data" ;
    // Remember the object as a global
    SetGlobalObject( "globalobj", myobj ) ;
    // At any time the object can be retrieved
    var myobj2 = GetGlobal( "globalobj" ) ;
    Application.LogMessage( "Retrieved global: " + myobj2.foo ) ;
    // Both myobj and myobj2 point to the same thing
    // so changing myobj2 affects myobj as well
    myobj2.foo = 6 ;
    Application.LogMessage( "Original object has changed: " + myobj.foo ) ;
    // SetGlobal on a JScript object will not work, it will end up storing an empty VBArray
    SetGlobal( "damagedglobalobj", myobj ) ;
    var myobj3 = GetGlobal( "damagedglobalobj" ) ;
    Application.LogMessage( "SetGlobal has destroyed myobj: " + VBArray(myobj3).toArray().length ) ;
    // Expected output
    //INFO : Retrieved global: 5
    //INFO : Original object has changed: 6
    //INFO : SetGlobal has destroyed myobj: 0

### See Also

SetGlobal GetGlobal ArgumentCollection.Add