Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Почему не записывается новое значение в глобальную переменую?

#javascript #global_variables #ecmascript




var arr = ["V", "l", "a", "d", "i", "m", "i", "r"];

var join = function (x) {
  return window.x = x.join('');
}

join(arr);

console.log(arr);




Вопрос стоит так, нужно получить именно новую переменную arr,которая в функции записывается
глобально, а не параметр функции.
    


Ответы

Ответ 1



Тоже отбитый вариант var arr = ["V", "l", "a", "d", "i", "m", "i", "r"]; var join = function(x) { for (var key in window) if (window[key] == x) window[key] = x.join(''); } join(arr); console.log(arr); Не особо правильно конечно но var arr = ["V", "l", "a", "d", "i", "m", "i", "r"]; var join = function (x) { window[x] = window[x].join(''); } join("arr"); console.log(arr);

Ответ 2



Такой код плохой, так как var join = function (x /* аргумент */) { return window.x /* глобальная переменная */ = x.join(''); } идёт путаница с x, в одном месте это название параметра в другом глобальная переменная. Конечно сам код запустится и скомпилируется, но таково кода следует избегать так как его сложно читать и сложно отлаживать. Так же таких конструкций тоже желательно избегать return window.x = x.join(''); лучше сделать отдельными операциями (одна строчка на одну операцию или группу операций единых по смыслу) что бы более была ясна суть, это конечно не ошибка рекомендую делать так window.x = x.join(''); return window.x; Заметим что результат попадает в возвратку функции и в x глобальную переменную, поэтому что бы вывести этот результат в консоль оттуда и надо брать console.log(x); или var rez = join(arr); console.log(rez); итого var arr = ["V", "l", "a", "d", "i", "m", "i", "r"]; var join = function(arr) { window.x = arr.join(''); return window.x; } join(arr); console.log(x);

Ответ 3



var arr = ["V", "l", "a", "d", "i", "m", "i", "r"]; var join = function (x) { return window.x = x.join(''); } join(arr); console.log(x); // <- ошибка

Комментариев нет:

Отправить комментарий