Javascript 布尔不是一个函数

Javascript 布尔不是一个函数,javascript,function,boolean,flow,Javascript,Function,Boolean,Flow,我只是想弄明白为什么这个代码不起作用 var programming = false; var happy = function() { if(programming === true) { happy = false; } else { happy = true } }; 或者我的第二代码 var programming = false; var happy = function() { if(programming === true) {

我只是想弄明白为什么这个代码不起作用

var programming = false;
var happy = function() {
  if(programming === true) {
      happy = false;
  }
  else {
      happy = true
  }
};
或者我的第二代码

var programming = false;
var happy = function() {
  if(programming === true) {
      happy = false;
  }
  if(programming) {
      happy = true;
  }
  };

根据您的代码和错误消息

var happy = function() {
  if(programming === true) {
      happy = false;
  }
  else {
      happy = true
  }
};
您有一个名为
happy
的函数,但随后您用布尔值覆盖它,似乎您稍后要调用它,这会产生错误“布尔值不是函数”。将函数中的变量
happy
更改为其他名称


JavaScript中一件有趣的事情是,如果更改声明函数的方式,代码将不会抛出错误:

var programming = false;
function happy() {
    if(programming === true) {
        happy = false;          //you should use the keyword var here actually
    } else {
        happy = true;
    }
}
happy();
这不会将函数更改为布尔值:

我想您的意思是

var programming = false;
var happy = function() {
  if(programming === true) {
      return false;
  }
  else {
      return true;
  }
};
这就是javascript的工作原理。您可以使用关键字
return
设置函数的返回值,而不是将函数重新指定给它的返回值


代码发生的情况是,第一次调用函数时,它会用返回值(即布尔值)替换自身。第二次尝试调用时,函数不再存在,因为变量
happy
现在包含一个布尔值(第一次调用的结果)。

您希望它做什么?到底发生了什么?“不起作用”的确切含义是什么?如果不希望它是布尔值,为什么要将布尔值指定给happy?您引用的代码正在定义名为
happy
的函数。然后你调用它,它将自己重新定义为布尔值。@Barmar-我使用了“似乎”一词,因为问题中的代码没有显示函数被调用。“似乎”应用于“你有”,而不是“你调用”。很明显,他是在打电话,因为这是得到错误的唯一方法。谢谢你回答了我的问题,它回来了。