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

170
01 марта 2018, 14:35

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,которая в функции записывается глобально, а не параметр функции.

Answer 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);

Answer 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);

Answer 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); // <- ошибка

READ ALSO
Книга &ldquo;You don&#39;t know javascript&rdquo; [требует правки]

Книга “You don't know javascript” [требует правки]

Друзья, добрый день! Скажите, будьте любезны, существует ли книга "You don't know javascript" на русском?

209
Не работает маленький код с if

Не работает маленький код с if

Почему в поле для ввода логина когда ввожу любые циферки и буквы оно переходит на поле для ввода пароля а не выводит "Go away"Если я убираю (|| 'User')...

244
This при работе c событиями в ES6

This при работе c событиями в ES6

Здравствуйте решил написать простенький класс таймера используя ES6 синктаксис

277
Добавить библиотеку в проект Node.js Express app

Добавить библиотеку в проект Node.js Express app

Пытаюсь освоить WebStormСоздал проект Node

370