将javascript函数的guid作为值而不是引用传递的最佳方法?

将javascript函数的guid作为值而不是引用传递的最佳方法?,javascript,Javascript,我有一个生成用于测试的GUI的函数: helpers.guid = function(){ var guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); return v.toString(16); }); return gui

我有一个生成用于测试的GUI的函数:

helpers.guid = function(){
  var guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
       return v.toString(16);
  });   
  return guid;
};
我称之为:

var thisTest.guid1 = helpers.guid();
var thisTest.guid2 = helpers.guid();
问题是每次我引用thisTest.guid1时,它都是不同的guid。我需要将object属性设置为一个永久值,但我不知道该怎么做。我尝试添加一个闭包,但无法使其工作


编辑:为了澄清,我需要能够生成多个guid,并将每个guid分配给不同的变量。现在,每次引用变量时,我都会得到一个新的guid,因为它可能会再次调用函数并返回一个新值。我需要“guid1”和“guid2”在每次使用时都是相同的值。

如果我理解正确,您可以使用两个函数:

1-用于生成GUID并将其存储在某个位置的函数,如 在窗体的某个隐藏控件中,以便以后可以获取它

2-检索隐藏控件值的函数


如果我理解正确,您可以使用2个功能:

1-用于生成GUID并将其存储在某个位置的函数,如 在窗体的某个隐藏控件中,以便以后可以获取它

2-检索隐藏控件值的函数


问题标题比不必要的复杂代码示例和文本要简单得多。。。让我们使用更简单的代码

var seed = 1 ;
function generate () {
    return seed++ ;
}
      var a = generate() ;    
alert(a + "\n" + a + "\n" + a ) ;
这当然会显示“1”三次。。。不管它是对象属性还是变量,它都会。函数的返回值保留在内存中,因为它被变量a引用。对象属性的行为当然相同:

var a = { b : generate() }; 
       alert( a.b + "\n" + a.b + "\n" + a.b ) ;
这将再次显示“1”三次。同样,对generate()的每次调用都将产生新的值

var a = {b:generate(), c:generate(), d:generate() }; 
alert( a.b + "\n" + a.c + "\n" + a.d ) ;

这将输出“1”、“2”和“3”。每个函数调用都返回一个由不同对象属性引用的值,因此我们有三个不同的值。

问题标题比不必要的复杂代码示例和文本简单得多。。。让我们使用更简单的代码

var seed = 1 ;
function generate () {
    return seed++ ;
}
      var a = generate() ;    
alert(a + "\n" + a + "\n" + a ) ;
这当然会显示“1”三次。。。不管它是对象属性还是变量,它都会。函数的返回值保留在内存中,因为它被变量a引用。对象属性的行为当然相同:

var a = { b : generate() }; 
       alert( a.b + "\n" + a.b + "\n" + a.b ) ;
这将再次显示“1”三次。同样,对generate()的每次调用都将产生新的值

var a = {b:generate(), c:generate(), d:generate() }; 
alert( a.b + "\n" + a.c + "\n" + a.d ) ;

这将输出“1”、“2”和“3”。每个函数调用都返回一个由不同对象属性引用的值,因此我们有三个不同的值。

可能是这样的:或者可能是“更好”:。此示例仅在第一次需要guid时生成它。我的第一个示例立即执行并永久保留该值“var thisTest.guid=helpers.guid();”抛出错误。我复制粘贴了您的代码,修复了thisTest变量,没有您描述的问题,thisTest.guid实际上是一个字符串,不是一个函数我希望您理解这实际上不是一个真正的guid…
thisTest.guid
上面没有引用函数。它引用函数的返回值。可能是这样的:或者可能是“更好”:。此示例仅在第一次需要guid时生成它。我的第一个示例立即执行并永久保留该值“var thisTest.guid=helpers.guid();”抛出错误。我复制粘贴了您的代码,修复了thisTest变量,没有您描述的问题,thisTest.guid实际上是一个字符串,不是一个函数我希望您理解这实际上不是一个真正的guid…
thisTest.guid
上面没有引用函数。它引用函数的返回值。