Значение переменной JavaScript перезаписывается при проверке на «неопределенное» - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть функция, которая вызывается в двух разных сценариях. Сценарий 1 запускается выбором выпадающего списка, и я устанавливаю переменную "sheetName" на основе выбранного значения. Сценарий 2 не имеет события триггера, поэтому я хочу установить переменную дальше в моем коде, когда я собрал другую информацию, необходимую для установки значения.

Теперь вот моя проблема: когда происходит Сценарий 1 , определяется sheetName и функция продолжается.Но с кодом ниже, sheetName выглядит как undefined , как только оно достигает , если условие для второго кода.Таким образом, здесь значение перезаписывается , поскольку программа считает, что sheetName не определено.

Всякий раз, когда я удаляю условие if для сценария second , все работает нормально, и sheetName имеет правильное значение, которое я определил ранее в коде.

Я не могу определить два значения в операторе if / else, потому что для первого сценария мне нужен oEvent , а для второго сценария мне нужен wb данные .. Почему условие if удаляет значение моей переменной?Я проверяю неправильно?

Пожалуйста, дайте мне знать, если вам нужно что-нибудь еще!

 onSheetSelected : function(oEvent) {
        var file = sap.ui.getCore()._file;
        var oTable = this.getView().byId('uploadData');
// Sheet name gets defined for Scenario 1       
        if(oEvent !== undefined) {              
            var sheetName = oEvent.getSource().getSelectedItem().getText();
        }
        if(file && window.FileReader){
            var reader = new FileReader();
            var result = {}, data;
            reader.readAsBinaryString(file);
            reader.onload = function(e) {
                var rawLog = reader.result;
                data = e.target.result;
                var wb = XLSX.read(data, {type: 'binary', cellDates: true, cellText: false, cellNF: true});
// Sheetname gets defined for Scenario 2
                if(sheetName === undefined) {
                    var sheetName = wb.SheetNames[0];   
                }
                var worksheet = wb.Sheets[sheetName];
                        ... some other stuff going on...
            }.bind(this);
        };
    },

1 Ответ

0 голосов
/ 21 ноября 2018

Вы столкнулись с этой проблемой из-за JavaScript Hoisting переменной, в которой вы повторно объявляете ее во втором сценарии

function thing1() {
  var sheetname = "this"
  //this will look at thing1.sheetname
  console.log(sheetname)

  function thing2() {
    // this will look at thing2.sheetname
    if (sheetname === undefined) {
      var sheetname = "that"
    }
    console.log(sheetname)
  }
  thing2()
}

thing1()

Но, удалив var, он будет искать, пока не найдет переменную с именем sheetname

function thing1() {
  var sheetname = "this"
  //this will look at thing1.sheetname
  console.log(sheetname)

  function thing2() {
    // this will look at thing1.sheetname
    if (sheetname === undefined) {
      sheetname = "that"
    }
    console.log(sheetname)
  }
  thing2()
}

thing1()
...