我得到了这段代码,它返回了引用错误
,但我不知道为什么,我看过很多关于引用错误的问答,但我仍然找不到它。如有任何帮助,我们将不胜感激。
提前致谢,愿原力与你同在。
我的代码:
var data = '[{"name":"node1","id":1,"is_open":true,"children":[{"name":"node2","id":6,"children":[{"name":"child3","id":7}]},{"name":"child1","id":2}]}]';
var dadSon = [];
(function printDadSon(data, parent) {
if (!data) return;
for (var i = 0; i < (data.length); i++) {
if (parent && parent != 'undefined') {
console.log('Dad: ' + parent + ' & Son: ' + data[i].id);
dadSon += ('Dad: ' + parent + ' & Son: ' + data[i].id);
}
printDadSon(data[i].children, data[i].id);
}
})(JSON.parse(data));
printDadSon(data);
最佳答案
您只是在立即调用的命名函数表达式的范围内声明该函数。 因此,当您调用它之后,它在线路上不可见。
您可以选择按如下方式声明函数
var data = '[{"name":"node1","id":1,"is_open":true,"children":[{"name":"node2","id":6,"children":[{"name":"child3","id":7}]},{"name":"child1","id":2}]}]';
var dadSon = [];
function printDadSon(data, parent) {
if (!data) return;
for (var i = 0; i < (data.length); i++) {
if (parent && parent != 'undefined') {
console.log('Dad: ' + parent + ' & Son: ' + data[i].id);
dadSon += ('Dad: ' + parent + ' & Son: ' + data[i].id);
}
printDadSon(data[i].children, data[i].id);
}
}
printDadSon(JSON.parse(data));
但是你不需要在后面调用它,后面的行是无用的(并且你的代码是错误的,因为你没有解析 JSON),只需使用
var data = '[{"name":"node1","id":1,"is_open":true,"children":[{"name":"node2","id":6,"children":[{"name":"child3","id":7}]},{"name":"child1","id":2}]}]';
var dadSon = [];
(function printDadSon(data, parent) {
if (!data) return;
for (var i = 0; i < (data.length); i++) {
if (parent && parent != 'undefined') {
console.log('Dad: ' + parent + ' & Son: ' + data[i].id);
dadSon += ('Dad: ' + parent + ' & Son: ' + data[i].id);
}
printDadSon(data[i].children, data[i].id);
}
})(JSON.parse(data));
第二个版本的优点是它不会用您不需要的函数声明污染外部作用域。
关于javascript - 如何阻止我的函数返回 "Reference error: (...) is not defined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31808534/