将javascript函数的guid作为值而非引用传递的最佳方式

Best way to pass a guid from a javascript function as a value not a reference?

本文关键字:引用 最佳 方式 函数 javascript guid      更新时间:2023-09-26

我有一个生成测试指南的函数:

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。我需要将对象属性设置为一个永久值,但我不知道如何做到这一点。我试着添加了一个闭包,但无法使它发挥作用。

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

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

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"answers"3"。对函数的每次调用都返回一个值,该值由不同的对象属性引用,因此我们有三个不同的值。

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

1-生成GUID并将其存储在某个位置的函数,如在你表单的某个隐藏控件中,这样你就可以稍后获得

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