Функция преобразована в функцию стрелки - функция не определена - PullRequest
0 голосов
/ 07 января 2019

Я только изучаю ES6 и узнал о функциях стрелок. Я просматриваю существующий файл и конвертирую функции одну за другой. Я преобразовал множество функций, и все они работали так же, как и раньше, за исключением 1.

Делая это, я могу позвонить page, чтобы получить текущее имя файла

let textArr = getPage.textArr;
let headingArr = getPage.headingArr;
const page = getPage.filename;

function getPage() {
  const url = window.location.pathname,
    fileWithExtension = url.substring(url.lastIndexOf('/')+1),
    filename = fileWithExtension.split('.').slice(0, -1).join('.')    
  ;    
  if (filename == "foo") {
    textArr = [ 
      `Text`,
      `Text`
    ];
    headingArr = null;
    return {filename, textArr, headingArr}
  }
}

Оставив все как есть, преобразовав функцию стрелки, затем вызвав page в консоли, я получу:

getPage не определено в строке 1

const getPage = () => {
        const url = window.location.pathname,
    fileWithExtension = url.substring(url.lastIndexOf('/')+1),
    filename = fileWithExtension.split('.').slice(0, -1).join('.')    
  ;    
  if (filename == "foo") {
    textArr = [ 
      `Text`,
      `Text`
    ];
    headingArr = null;
    return {filename, textArr, headingArr}
  }
}

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Это проблема подъема. Функции подняты по умолчанию. Этого не происходит с функциями стрелок, назначенными переменной. Если вы хотите, чтобы это работало, вам нужно переместить определение const, прежде чем вызывать его. Как это:

const getPage = () => {
        const url = window.location.pathname,
    fileWithExtension = url.substring(url.lastIndexOf('/')+1),
    filename = fileWithExtension.split('.').slice(0, -1).join('.')    
  ;    
  if (filename == "foo") {
    textArr = [ 
      `Text`,
      `Text`
    ];
    headingArr = null;
    return {filename, textArr, headingArr}
  }
}

let textArr = getPage().textArr;
let headingArr = getPage().headingArr;
const page = getPage().filename;
0 голосов
/ 07 января 2019

Добавьте еще 1 фигурные скобки, тогда он будет работать.

const getPage = () => {
    const url = window.location.pathname,
fileWithExtension = url.substring(url.lastIndexOf('/')+1),
filename = fileWithExtension.split('.').slice(0, -1).join('.');    
if (filename == "foo") {
   textArr = [ 
    `Text`,
    `Text`
   ];
   headingArr = null;
   return {filename, textArr, headingArr}
  }
}
0 голосов
/ 07 января 2019

Вы на самом деле не вызываете свою функцию, т. Е. const page = getPage.filename; следует заменить на const page = getPage().filename;

Для всех трех переменных вы можете сделать что-то вроде:

let {textArr, headingArr, textArr} = getPage();
...