【发布时间】:2018-10-09 11:03:31
【问题描述】:
这似乎是一个很难回答的问题。给定一个函数,例如显示的函数,您将如何获取输入变量的名称以进行调试。即)root -> root.left -> root.right -> root.left.right -> etc... 或即)tree -> tree.left -> tree.right -> tree.left.right -> etc...
function TreeNode(val) {
this.val = val;
this.left = this.right = null;
}
var sum = function(root) {
console.log(root);
if(root === null) return 0;
return root.val + sum(root.left) + sum(root.right);
}
let tree = new TreeNode(1);
tree.left = new TreeNode(2);
tree.right = new TreeNode(3);
tree.left.right = new TreeNode(4);
let x = sum(tree);
console.log(x);
基本上,我想在 sum 函数中 console.log() 变量的名称而不是 root。
【问题讨论】:
-
所以你想登录
"tree"?还是我理解有误? -
这是个好问题。我想要么是树,要么是根。然后,我想记录 tree.left 或 root.left 等...
-
你不能。当您的
sum函数被调用时,它会被传递一个值。该值是指向对象的指针,并且与指针所来自的变量完全没有联系。如果您先执行let x = y = tree;,然后执行sum(x)和sum(y),则对sum()的两次调用将完全没有区别。它们传递了完全相同的值(指向tree对象的指针),并且根本没有对x或y的引用。 -
如果它在运行时用于调试目的,只需使用调试器并在函数中放置断点即可。或者添加一个
debugger语句(这是一个手动调试点)。无论如何,您将能够退回到调用链以查看该函数是如何被调用的。如果您想在某种日志中看到它,那么我认为这是不可能的。
标签: javascript node.js debugging ecmascript-6 binary-tree