我真的不确定这是否可以在Javascript中使用。这是我的功能:
var tree = function(name, callback) {
if (this.name) {
this.name.push(name)
print(this.name)
} else {
this.name = []
}
callback()
}
我想按如下方式使用它并打印层次结构:
tree("john", function() {
tree("geoff", function() {
tree("peter", function() {
tree("richard", function() {
})
})
})
tree("dave", function() {
})
})
这是所需的输出:
// ['john']
// ['john', 'geoff']
// ['john', 'geoff', 'peter']
// ['john', 'geoff', 'peter', 'richard']
// ['john', 'dave']
但不幸的是我得到了
// ['john', 'geoff', 'peter', 'richard', 'dave']
用于最后一次函数调用。有没有办法获得理想的结果?
亲切的问候
Adam Groves
答案 0 :(得分:2)
最后一行打印所有名称的原因是因为 this.names 永远不会删除添加到它的名称。你只需要在其上添加名称。所以当进行函数调用时
callback()
的值为
function() {
tree("richard", function() {
})
this.names = ['john','geoff','peter'] 并在致电 this.names = ['john','geoff','peter'之后,'richard'] 。所以现在当你打电话
tree("dave", function() {
});
this.names仍然是 ['john','geoff','peter','richard'] 。
请尝试以下操作,并注意我已将 this.name 更改为 this.names 以使其更易于阅读。
var tree = function(name, callback) {
if (!this.names) {
this.names = [];
}
this.names.push(name);
print(this.names);
callback();
this.names.pop();
}
答案 1 :(得分:1)
我不确定回调是做什么的,但是当你调用它时你应该使用apply()或call()。
callback.apply( this, arguments );