iam_not_a_robot
@iam_not_a_robot

Почему не работает return?

<div id="echo"></div>
document.addEventListener("mousemove", function() 
{ 
  var coord = [];
	coord[0] = event.clientX+'px';
	coord[1] = event.clientY+'px';
	return coord;
});
document.getElementById('echo').innerHTML=coord;

Ошибка Uncaught ReferenceError: coord is not defined ( в строке 8)

Пробовал вынести создание из функции, потом передать в неё, пополнить и вернуть так:
var coord = [];
document.addEventListener("mousemove", function(coord) 
{ 
	coord[0] = event.clientX+'px';
	coord[1] = event.clientY+'px';
	return coord;
});
document.getElementById('echo').innerHTML=coord;

Ошибок нет, но и не выводит ничего на экран...
  • Вопрос задан
  • 267 просмотров
Решения вопроса 1
IonDen
@IonDen
JavaScript developer. IonDen.com
return имеет смысл только в синхронных функциях. Вот так:
function calc (a, b) {
    return a + b;
}

var c = calc (2, 2); // 4


В асинхронных функциях return не имеет смысла, так как на момент выполнения кода, ничего не возвращается.
Подумайте сами, в вашем случае, до наступления события мыши mousemove может пройти очень много времени.
По этому с асинхронным кодом работают под другому. Вот пример на коллбэках:
document.addEventListener("mousemove", function (e) {
  var coord = [];
  coord[0] = e.clientX+'px';
  coord[1] = e.clientY+'px';

  next(coord); // вызов коллбэка
});

function next (coord) {
  console.log(coord);
}


Помимо коллбэков существуют и другие подходы, например обещания. В jQuery есть кроссбраузерная реализация.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
В первом варианте coord у вас является локальной переменной.
А во втором варианте вы перекрываете глобальную coord, локальной.
document.addEventListener("mousemove", function( ---> coord <---- )

Удалите выделенное и будет вам счастье
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы