Машинопись - данные не доступны внутри функции - PullRequest
1 голос
/ 11 марта 2019

Я создал рекурсивную (rec) функцию внутри метода setBinary в машинописи.Но по некоторым причинам данные 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)

}

1 Ответ

1 голос
/ 11 марта 2019

Вы создаете новый 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...