【发布时间】:2016-08-21 04:42:15
【问题描述】:
查看调用 Stack 和 Watch,现在当我按下 F10 时,“Watch”中的行值变为“object Object”,因此一切都发生了,我了解了直到此时的流程,然后发生了什么不清楚。现在在病房里,为什么即使我在第 8 行提供断点,代码也不会在第 8 行停止
这是stackoverflow的问题
我正在尝试理解这段代码 sn-p
function assign(obj, prop, value) {
if (typeof prop === "string")
prop = prop.split(".");
if (prop.length > 1) {
var e = prop.shift();
assign(obj[e] =
Object.prototype.toString.call(obj[e]) === "[object Object]"
? obj[e]
: {},
prop,
value);
} else
obj[prop[0]] = value;
}
var obj = {},
propName = "foo.bar.foobar";
assign(obj, propName, "Value");
递归是如何发生的,因为函数没有返回任何东西? 内部调用中的参数值如何随着最顶部调用堆栈(分配函数)中的函数而改变?
感谢大家的回答,但我的确切问题是它是如何在这一特定行(第 8 行)发生的。
【问题讨论】:
-
javascript 中的对象是通过引用而不是值传递的。这意味着当您将对象引用作为函数的参数传递时,函数的参数仍然引用同一个对象。
-
使用调试器遍历代码可能很有用。
-
已经完成了调试,你们能解释一下吗,这个 - Object.prototype.toString.call(obj[e]) - value 第一次变成“object Object”并且为什么即使我在那里应用了断点,当最高调用堆栈中的函数开始返回时,代码也不会在函数的内部调用处停止?
-
Object.prototype.toString.call(obj[e]) === "[object Object]"不应在上述 sn-p 的第一次运行中返回true。我认为它也可以检查为typeof obj[e] === "object"另一方面,即使不需要,如果这些函数返回结果对象以用于链接目的会更好。
标签: javascript object recursion