Ответы пользователя по тегу JavaScript
  • Если true выводит false а если false выводит true замыкание, что не так?

    @mikutsky
    Вот что не так:
    Замыкание почти рабочее.
    В условии Вы используете "=" - это оператор присвоения, нужно использовать оператор сравнения "==" - нестрогое или "===" - строгое. И много лишнего кода. Это простейший случай, можно в одну строчку уместить.
    Вызываете функцию тоже совсем не верно!

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

    Вот мои замечания к Вашему коду:
    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
    Ответ написан
    1 комментарий