我已经在打字稿中的setBinary方法内创建了递归(rec)函数。但是由于某些原因,无法在打字稿中的递归函数内部访问copyColumns数据,但在rec函数外部运行良好。我的代码有什么问题。
在运行console.log(this.copyColummns);
时出现未定义的状态。
copyNodeHandler ( column, node ) {
this.copyHeaders = [];
this.copyHeadersDeepCopy = [];
for ( let i = 0; i < node[ 0 ].values.length; i++ ) {
this.copyHeaders.push(node[ 0 ].values[ i ].parameterId)
}
this.copyColumns = node;
}
setBinary(rowId, vId, data) {
console.log(this.copyColumns); // working fine
let rec = function (pri, pvi) {
console.log(pri + '' + pvi);
console.log(this.copyColumns); // Not working returns undefined.
let latest = [];
if (this.copyColumns[pri]) {
this.copyColumns[pri].values[pvi].active = true;
let x = this.copyColumns[pri].values[pvi]
rec(x.pri, x.pvi)
}
};
rec(data.pri, data.pvi)
}
答案 0 :(得分:1)
您正在创建一个新的function
,它将在javascript中创建一个新的作用域。
您可以使用箭头函数(保留其定义的功能范围),或者需要将此函数绑定到函数。
方法1:
// arrow function
let rec = (pri, pvi) => {
console.log(pri + '' + pvi);
console.log(this.copyColumns); // Now this.copyColumns will be the same as outside this function
let latest = [];
if (this.copyColumns[pri]) {
this.copyColumns[pri].values[pvi].active = true;
let x = this.copyColumns[pri].values[pvi]
rec(x.pri, x.pvi)
}
};
方法2:
let rec = function (pri, pvi) {
console.log(pri + '' + pvi);
console.log(this.copyColumns); // Not working returns undefined.
let latest = [];
if (this.copyColumns[pri]) {
this.copyColumns[pri].values[pvi].active = true;
let x = this.copyColumns[pri].values[pvi]
rec(x.pri, x.pvi)
}
// bind this to the function
}.bind(this);