Посмотрите на вызов Stack and Watch, теперь, когда я нажимаю F10, значение линии в «Watch» изменяется как «Object Object», и из-за этого все происходит, я понимаю поток до этого времени, а потом то, что происходит, Чисто. Теперь в палатах, почему код не останавливается на линии 8, даже если я Предоставлять точку останова в строке 8Как рекурсия происходит в этом фрагменте кода?
Это вопрос о stackoverflow
Я пытаюсь понять этот фрагмент кода
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]) - значение в первый раз является «объектным объектом» и почему код не останавливается на внутренний вызов функции, когда функция в старшем стеке вызовов начинает возвращаться, даже если я применил там точку прерывания? –