【问题标题】:Can a function know the names of the variables it takes as arguments? [duplicate]函数可以知道它作为参数的变量的名称吗? [复制]
【发布时间】:2011-11-28 15:59:55
【问题描述】:

可能重复:
Inspect the names/values of arguments in the definition/execution of a JavaScript function

在调试javascript的时候,我经常有这样的代码:

function doSomething(a,b,c) {
    console.log(a,b,c);

    //function contents here
    //...
}

这会导致控制台中出现这样的一行:

0.0010719847172334315 0.002392010391772366 -2.764548758273147e-7

很难阅读。我想要这样的输出:

a: 0.0010719847172334315, b: 0.002392010391772366, c: -2.764548758273147e-7

这可能吗?我认为不可能用多种语言进行。但是,我对 javascript 不是很了解,而且它似乎是一种可以做这种聪明事情的语言。

【问题讨论】:

  • 许多调试器给你的能力比你在那个地方设置一个制动点还要强大。我更喜欢使用它们而不是在 console.logs 下乱扔代码

标签: javascript


【解决方案1】:

你可以通过接受一个参数对象并对其进行迭代来做这样的事情:

function doSomething(options) {
    var i, parameterString = [];
    for (i in options) {
        if (!options.hasOwnProperty(i)) continue;
        parameterString.push(i + ': ' + options[i]);
    }
    console.log(parameterString.join(', '));

    //function contents here
    //...
}

// Invoke like this:
var result = doSomething({a: 'a', b: 'b', c: 'c'});

请注意,大部分麻烦是由于您希望将参数记录在一行上;在其他一些情况下(例如每行记录一个),您可以简单地在每个单独的字符串上调用 console.log 而不用担心数组或字符串连接。

【讨论】:

  • 不过,我不确定使用位置参数做你想做的事情有多容易。对不起:-(
  • @Matt:我的意思是函数声明如下:function doSomething(a, b, c);似乎没有办法获得这些变量的名称,因为它们实际上是位置参数。如果你想要关键字参数,你需要一个对象;在这种情况下,您的对象和我的对象在我的功能中都将同样有效。
  • @PlatinumAzure 感谢您的回答。我想这是我们可以管理的最好的解决方案。虽然这并不理想 - 我提出这个问题的主要动机是获得一个函数来快速为某些变量集编写一些可读的诊断,而不必编写类似 console.log("username:" + usr + " ,first name: " + frstName); 或类似的东西。拥有一个接受对象的函数只会有一点帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
  • 2011-01-25
相关资源
最近更新 更多