每次在 JavaScript 中运行函数时创建一个新的唯一全局变量

Create a new unique global variable each time a function is run in javascript

本文关键字:一个 全局变量 唯一 创建 JavaScript 运行 函数      更新时间:2023-09-26

可能的重复项:
Javascript 动态变量名称

一个非常基本的问题。 我想在每次调用函数时创建一个新的 javascript 全局变量。 该变量应包含元素的 id,以便我以后可以轻松访问它。

id = 2347
//this function would be called multiple times, hopefully generating a new global each time
function (id)
{
var + id = something
// I want a variable that would be named var2347 that equals something, but the above line doesn't get it.
}

在后面的函数中,我想像这样访问变量:

function two (id)
{
alert(var + id);
}

我敢肯定,当有人好心地回答这个问题时,我会有一个"doh!"的时刻。

怎么样...

var store = (function() {
    var map = {};
    return {
        set: function ( name, value ) {
            map[ name ] = value;
        },
        get: function ( name ) {
            return map[ name ];
        }
    };
})();

用法:

store.set( 123, 'some value' );

然后。。。

store.get( 123 ) // 'some value'
store.get( 456 ) // undefined

现场演示:http://jsfiddle.net/jZfft/

强烈建议程序员不要声明全局变量,因为浏览器已经在全局命名空间中附带了数百个名称。对自己的变量使用全局命名空间可能会导致名称冲突,从而破坏程序或浏览器的某些功能。创建新的命名空间是免费的,所以不要害羞......

全局变量是window对象的属性,因此window.lolwindow['lol']定义一个全局变量lol可以通过这些方式中的任何一种访问。第二个,window['lol'] 也可以与变量名一起使用,如下所示:

var lol = 123;
var name = 'lol';
var content = window[name]; // window['lol'] == 123

content现在将包含 123。几乎任何东西都可以放在方括号[]之间,所以你也可以这样做:

var id = 123;
window['prefix' + id] = 'text';
var content = window['prefix' + id]; // prefix123 == text

或者,在您的情况下:

var id = 2347;
function one(id) {
  window['var' + id] = something;
}
function two(id) {
  alert(window['var' + id]);
}

您可以将值保存到全局哈希:

var g = {};
function (id)
{
  g[id] = something;
}
function two (id)
{
  alert(g[id]);
}
我认为

你真的不想做很多全局变量。 相反,您可以只创建一个全局对象或数组,并将所有其他变量附加到该对象或数组。 在这种情况下,您可能需要一个对象:

var myIds = {};
function makeSomething(id) {
    // create something that goes with this id
    myIds[id] = something;
}

然后,要在以后的某个时间获取该信息,您可以使用以下内容检索它:

var something = myIds[id];

提出这一建议的原因有很多。 首先,您希望最小化全局变量的数量,因为每个全局变量都有机会与您可能正在使用的其他脚本发生命名冲突。 其次,在跟踪一堆相关数据时,将其保存在一个特定的数据结构中是一种更好的编程实践,而不是将它们与所有其他数据一起全部扔进巨大的全局垃圾箱中。

甚至可以创建一个对象来为您管理所有这些:

function idFactory() {
    this.ids = {};
}
idFactory.prototype = {
    makeSomething: function(id) {
        // create something that goes with this id
        this.ids[id] = something;
    },
    retrieveSomething: function(id) {
        return(this.ids[id]);
    },
    clear: function() {
        this.ids = {};
    } 
};
// then you would use it like this:
var myIds = new idFactory();
myIds.makeSomething(2347);
var value = myIds.retrieveSomething(2347);