在将变量的名称作为参数传递给另一个函数后,我可以将其作为字符串访问吗?

时间:2015-08-19 12:01:23

标签: javascript jquery variables scope

也许是一个稍微暗淡的问题,但我正在设计一些我正在使用javascript / jquery来改变网站布局的东西,我想看到变量名称和它的当前值的值另一个div。

我只是在做$test.append('example string' + exampleVar),所以我想我会创建一个名为test()的函数。

到目前为止,我有:

function test (test) {
    $test = $('.test');
    $test.append(test+"<br>");
}

然后将传递一个变量名作为参数,但我找不到任何方法使它将名称显示为字符串。我知道将它作为一个对象来访问密钥和值,但这似乎并没有真正起作用?

4 个答案:

答案 0 :(得分:1)

这是一个冗长的方式,但这是一个使用对象的例子:

function tester(options) {
  var keys = Object.keys(options);
  console.log(keys[0] + ': ' + options[keys[0]]); // test: My value
}

tester({ test: 'My value' });

DEMO

答案 1 :(得分:0)

在函数中,您将使用参数。因此,在这种情况下,“变量名称”将始终是参数的名称。在这种情况下,获取字符串值将始终是测试。我认为这不是你想要的。你是对的,最好的方法是使用一个对象并迭代键值。你会这样做:

var test = {
    "test" : "value"
};
function test (test) {
    var k, $test = $('.test');
    for(k in test){
        $test.append(k + "<br>");
    }
}

另外,我认为没有办法获取变量字符串名称。所以上面将是获取变量名称的方法。

答案 2 :(得分:0)

您可以使用javascript功能obj["prop"]obj.prop相同

因此,不是将变量作为变量传递并希望获取其名称,而是使用名称作为字符串来获取变量的值。

如果您没有使用名称空间/变量并希望使用全局/根变量,请传递窗口,例如:

function test(obj, val) {
    console.log(val + ": " + obj[val]);
}

var val1 = 1;
var val2 = 2;

test(window, "val1");
test(window, "val2");

(显然你不会得到&#39; obj&#39; - 但也许它不是一个开始)

如果你只有root /全局变量(如问题中提供的例子)那么你可以删除obj:

function test(val) {
    console.log(val + ": " + window[val]);
}

var val1 = 1;
var val2 = 2;

test("val1");
test("val2");

答案 3 :(得分:0)

看起来你想要做的事情是这样的:

var argumentName = /([^\s,]+)/g;
// fu is a function
// fu.toString look like: function myFunction (param[, param]*)  { code }
function getParamNames(fu) {
    var f = fu.toString();
    return f.slice(f.indexOf('(')+1,f.indexOf(')')).match(argumentName);
}

然后您可能想要创建一个将执行所有功能的帮助程序:

// I choosed the console as an output, but you can set anything
function displayParameters(fu) {
    var _params = getParamNames(fu);
    if(_params!==null) {
        for(var i=0;i<_params.length; i++) {
            console.log(_params[i]);
        }
    } else { console.log('no parameters'); }
}

而且,您需要致电:displayParameters(test);