Вот что не так:
Замыкание почти рабочее.
В условии Вы используете "=" - это оператор присвоения, нужно использовать оператор сравнения "==" - нестрогое или "===" - строгое. И много лишнего кода. Это простейший случай, можно в одну строчку уместить.
Вызываете функцию тоже совсем не верно!
Вызов функции должен происходить перед каждым выводом результата в консоль, иначе значение не будет меняться на противоположное.
Вот мои замечания к Вашему коду:
function toggleMe (){
var a = 0; //я бы сразу задал булевое значение,
//например false;
return function(){
//можно обойтись без if, сразу присвоить
//переменной а, противоположное значение
//и вернуть, как-то так: return a=!a;
if(a =true){ //если хочется if, проверку
//равенства делают так if(a==true)
//или ещё проще, тут: if(a)
a = false;
}else if (a =false) { //этот if вообще не нужен
a =true;
}
return a;
}
}
var a = toggleMe();
var b= a(); //вы присваивание результат
//выполнения функции переменной b,
//чтобы значение b менялось,
//функцию нужно вызывать заново,
//Можно так b=a(); и b выводить,
//Но лучше сразу выводить a()
console.log(b);
console.log(b);
Функцию с одним действием, можно записать в стрелочной форме.
Вот лаконичная реализация:
function toggleMe(){
let a = false;
return () => a = !a;
}
const a = toggleMe();
console.log(a()); //true
console.log(a()); //false