【问题标题】:Best way to pass a guid from a javascript function as a value not a reference?将 guid 从 javascript 函数作为值而不是参考传递的最佳方法?
【发布时间】:2013-06-26 17:30:50
【问题描述】:

我有一个功能可以生成用于测试的 guid:

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”和“guid2”都是相同的值。

【问题讨论】:

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

标签: javascript


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    1 - 生成 GUID 并将其存储在某处的函数,例如 在表单某处的隐藏控件中,以便稍后获取它

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多