Функция закрытия JavaScript - PullRequest
       1

Функция закрытия JavaScript

0 голосов
/ 24 октября 2018

Я новичок в JavaScript и сейчас изучаю замыкания.Ниже вы можете увидеть мой код, который должен печатать любой массив с указанным разделителем между каждым элементом.Дело в том, что если я пытаюсь создать массив и напечатать его в функции makePath (), все работает просто отлично.Но когда я пытаюсь сделать то же самое в основной функции, это просто не работает.У меня также есть еще одна проблема, когда я пытаюсь соединить разделитель с массивом. Разделитель печатается в конце списка, и я этого не хочу.

var makePath;

function makePath(separator) {
  let comp = []
  return function(element)

  {
    comp.push(element)
    return comp.join(separator)
  }
}

var path0 = makePath("/");
path0("A");
path0("B");
path0("C");
console.log("path 0 is " + path0());


var main = function() {

  var path1 = makePath("/");

  path1("A");
  path1("B");
  path1("C");

  var path2 = makePath("-->");
  path2("Berlin");
  path2("San Francisco");
  path2("Vancouver");

  var path3 = makePath();
  path3("A");
  path3("B");
  path3("C");

  window.console.log("path 1 is " + path1());
  window.console.log("path 2 is " + path2());
  window.console.log("path 3 is " + path3());
}

Вывод:

path 0 is A/B/C/

1 Ответ

0 голосов
/ 24 октября 2018

Q1: почему функции makePath в main () не работали?
Ответ: Вы объявляете только основную функцию, но не вызываете ее, просто добавьте main() в конце, это будетработа!

Q2: Почему в конце вашей выходной строки есть дополнительный разделитель?
Ответ: Проблема здесь: console.log("path 0 is " + path0());.
Вы вызвали дополнительный path0(), которыйделает ваш массив comp ставшим ['A', 'B', 'C', ''].

Вы можете изменить свой код следующим образом:

var path0 = makePath("/");
path0("A");
path0("B");
let finalResult = path0("C");
console.log("path 0 is " + finalResult);

Без дополнительныхвызов, результат должен работать, как вы ожидали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...