传递给函数后确定变量的原始名称

And*_*off 25 javascript

我有一种感觉,这可能是不可能的,但我想确定一个变量的原始变量名称,该变量已经传递给javascript中的函数.我不知道如何更好地解释它,所以看看这个例子是否有意义.

function getVariableName(unknownVariable){
  return unknownVariable.originalName;
}

getVariableName(foo); //returns string "foo";
getVariableName(bar); //returns string "bar";
Run Code Online (Sandbox Code Playgroud)

这是我正在处理的jquery插件,我希望能够显示传递给"调试"函数的变量的名称.

dec*_*eze 20

你是对的,这在任何理智的方式都是不可能的,因为只有值被传递到函数中.

  • 获取回溯,获取函数调用的文件和行号,加载该文件的源代码,查找并解析该行,尝试找出哪个变量是您的参数.由于在一行上可能有任意数量的函数调用,并且函数可能在运行时别名,更不用说任务的复杂性,我希望这种情况的疯狂是不言而喻的. (11认同)
  • 什么是疯狂的方式? (7认同)

Off*_*rmo 9

由于 ES6,这现在以某种方式成为可能:

function getVariableName(unknownVariableInAHash){
  return Object.keys(unknownVariableInAHash)[0]
}

const foo = 42
const bar = 'baz'
console.log(getVariableName({foo})) //returns string "foo"
console.log(getVariableName({bar})) //returns string "bar"
Run Code Online (Sandbox Code Playgroud)

唯一的(小)问题是您必须将未知变量包装在 之间{},这没什么大不了的。

  • 那么你不应该说“感谢 es6 以某种方式可能”,你的答案基本上是——'你可以通过将值作为对象发送,并将键作为变量名来做到这一点'......这也很容易在es5 使用 Object.keys 的 polyfill,或者简单地传递一个具有变量名称的对象作为另一个属性。 (11认同)
  • `{foo}` 只是 `{foo:42}`... 所以你只是将它作为一个对象发送。请参阅“ECMAScript 2015 中的新符号”:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer (6认同)