布尔值不是函数

时间:2014-05-23 21:58:48

标签: 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) {
      happy = false;
  }
  if(programming) {
      happy = true;
  }
  };

2 个答案:

答案 0 :(得分:1)

根据您的代码和错误消息

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();

这不会将函数更改为布尔值:http://jsfiddle.net/kLksY/

答案 1 :(得分:1)

我认为你的意思是

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

这是javascript的工作原理。您可以使用关键字return设置函数的返回值,而不是通过将函数重新分配给它的返回值。

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