Javascript 如何在JS中创建不可变的值?

Javascript 如何在JS中创建不可变的值?,javascript,Javascript,我从这样的函数中得到一个随机值: var randomString = function(length) { var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split(''); if (! length) { length = Math.floor(Math.random() * chars.length); }

我从这样的函数中得到一个随机值:

var randomString = function(length) {
        var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');

        if (! length) {
            length = Math.floor(Math.random() * chars.length);
        }

        var str = '';
        for (var i = 0; i < length; i++) {
            str += chars[Math.floor(Math.random() * chars.length)];
        }
        return str;
    }
但是当我尝试使用“id”变量时,每次都是不同的值,因为它每次都调用函数

我试着把它放在一个物体里,然后像这样冻结它:

var id = {};
Object.defineProperty( id, "id", {
  value: randomString(10),
  writable: false,
  enumerable: false,
  configurable: false
});
         var newid = Object.freeze(id);  
但每次我尝试使用“newid.id”变量时,它仍然会得到一个新的随机字符串


如何使用相同的随机字符串两次?有没有办法将其冻结或保持不变

这将非常容易使用php会话。但是,使用javascript cookie怎么样?看看:jscookieat

别担心,我是个白痴。值正在其他地方更改。

这不是真的。函数只运行一次。运行上述代码时,
id
变量应为常量。我刚刚测试并验证了多次记录
id
每次都记录相同的输出:。如何使用
id
变量?向我们展示完整的代码。最有可能的情况是,您有多个
id
变量,但没有注意到它(例如,多次执行包含它的函数)。如果您担心重新分配
id
,请将其设置为
const
,而不是
var
;不要担心字符串值,它们不能被改变。@obsidymanage它在async.eachOfSeries循环中的angular.forEach循环中-也许这就是原因?我不知道,谢谢你的尝试。@jthomasbailey好的,是的,如果你不想在每次迭代中得到一个新的随机值,就把它放到循环之外。不,我想我对他想做什么有一个合理的想法。为了能够两次使用随机字符串,他可以使用本地存储将第一个生成的id存储在会话或cookie中。我错了吗?这并没有直接解决问题,这比使用cookies或PHP.PHP更简单?OP没有透露他正在使用哪种服务器端技术。(问题中显示的代码甚至可以在Node.js中运行服务器端本身。)您可能只想删除问题。
var id = {};
Object.defineProperty( id, "id", {
  value: randomString(10),
  writable: false,
  enumerable: false,
  configurable: false
});
         var newid = Object.freeze(id);