function writeCircle() {
const gameCell = document.querySelectorAll(".game_field");
gameCell.forEach((el) => {
el.addEventListener("click", (e) => {
const circle = document.createElement("div");
circle.classList.add("circle");
e.target.append(circle);
});
});
}
//функция добавления крестика при клике
function writeCross() {
const gameCell = document.querySelectorAll(".game_field");
gameCell.forEach((el) => {
el.addEventListener("click", (e) => {
const cross = document.createElement("div");
cross.classList.add("cross");
e.target.append(cross);
});
});
}
делаю крестики нолики, есть 2 функции, одна на поле ресует крестик,другая нолик, как сделать что бы они выполнялись друг за другом,сначала одна,потом другая.
JavaScript
Как сделать что бы 2 функции выполнялись поочередно.JS
Идея, похожая на предыдущий ответ, но с другой реализацией и позволяющая задать последовательность функций любой длины:
function toggler(...func) {
let idx = -1;
return function() {
func[idx = ++idx % func.length]();
}
}
let myToggle = toggler(writeCross, writeCircle);
myToggle();
myToggle();
myToggle();
Хотя, конечно, логичнее это делать через генератор и не выполнять функцию внутри генератора, а возвращать её: function *toggler(...func) {
let idx = -1;
for (;;) { yield func[idx = ++idx % func.length]; }
}
let myToggle = toggler(writeCross, writeCircle);
myToggle.next().value();
myToggle.next().value();
myToggle.next().value();
Открой для себя понятие callback, функция обратного вызова...
Странно что никто не говорит что эти функции спокойно можно объединить в одну. Они же пратически идентичные. Тип фигуры можно заключить внутри функции и переключать после каждого вызова.
const gameField = document.querySelectorAll(".game_field");
const drawShape = function (){
let shapeType;
return function(){
shapeType = shapeType == 'cross' ? 'circle' : 'cross';
const shape = document.createElement("div");
shape.className = shapeType;
this.append(shape);
}
}();
for(const square of gameField){
square.addEventListener('click', drawShape);
}
function writeCircle() {
const gameCell = document.querySelectorAll(".game_field");
gameCell.forEach((el) => {
el.addEventListener("click", (e) => {
const circle = document.createElement("div");
circle.classList.add("circle");
e.target.append(circle);
});
});
}
//функция добавления крестика при клике
function writeCross() {
const gameCell = document.querySelectorAll(".game_field");
gameCell.forEach((el) => {
el.addEventListener("click", (e) => {
const cross = document.createElement("div");
cross.classList.add("cross");
e.target.append(cross);
});
});
}
// функция переключения функций
function toggler(a, b) {
var current;
return function() {
current = current === a ? b : a;
current();
}
}
var myToggle = toggler(writeCircle, writeCross);
myToggle(); // executes writeCircle
myToggle(); // executes writeCross
myToggle(); // executes writeCircle
просто вызывай эти функции внутри этих же самых функций
Похожие вопросы
- Зачем разработчики js сделали так что там где могли быть функции они добавили методы встроенных объектов.
- Зачем нужны функции в js?
- Как вернуть что-нибудь из вложенной функции в JS
- Помогите определиться с выбором нового языка (JS(TS) vs Java)
- Js фреймворки, что полезного можно для себя найти?
- В чем цель фреймворков js web?
- [HTML/CSS/JS] Как сохранять изменённые в .js данные оффлайн-сервера локально?
- Почему jQuery методы популярнее js методов при общении с ДоМ?
- ПОЧЕМУ JS ТАКОЙ НЕПОНЯТНЫЙ???
- вопрос по JS. " простой ()";