【问题标题】:Boolean is not a function布尔不是函数
【发布时间】:2014-05-23 21:58:47
【问题描述】:

我只是想弄清楚为什么这段代码不起作用。

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;
  }
  };

【问题讨论】:

  • 你希望它做什么?实际发生了什么? “不起作用”到底是什么意思?
  • 如果您不希望它是布尔值,为什么还要将布尔值分配给快乐?

标签: javascript function boolean flow


【解决方案1】:

我想你是说

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

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

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

【讨论】:

  • 谢谢你回答我的问题,它回来了。
【解决方案2】:

根据您的代码和错误消息,

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/

【讨论】:

  • “看起来像”?您引用的代码是定义名为happy 的函数。然后你调用它,它把自己重新定义为布尔值。
  • @Barmar - 我使用了“看起来像”这个词,因为问题中发布的代码没有显示函数被调用。
  • “似乎”应用于“你有”,而不是“你打电话”。很明显他在调用它,因为这是得到错误的唯一方法。
猜你喜欢
  • 1970-01-01
  • 2013-05-06
  • 2017-12-24
  • 2019-08-17
  • 2013-12-26
  • 1970-01-01
  • 2011-10-17
  • 2012-01-23
  • 2014-03-14
相关资源
最近更新 更多