【问题标题】:TypeError: number is not a function when invoking a functionTypeError:调用函数时数字不是函数
【发布时间】:2015-11-23 23:00:01
【问题描述】:

我必须编写一个必须由任何一方调用的函数

sum(2,3); //5 
//or
sum(2)(3); //5

这段代码是我写的

function sum (a,b){
return a + b;
}
sum(2,3);

我得到“TypeError:数字不是函数”。为什么?

【问题讨论】:

  • “我必须编写一个必须由其中任一方调用的函数” 为什么?另外:你不能(合理地)那样做。
  • sum(2,3) 的身份执行它不会按照您的描述给出 TypeError !!猜你的意思是:sum(2)(3)。关于您的文字问题 why:您当前的函数返回了一个数字(数字 a + 数字 b 是一个数字。如果(其中一个)参数是一个字符串,那么您将得到一个字符串作为回报,其中...*also* 不是函数)。然后你尝试执行()这个返回的数字(它不是一个函数),传递参数值3。但是由于数字不是函数,所以你得到的只是一个 TypeError ......是的,我忍不住,但话又说回来......你问了“为什么”这个问题......

标签: javascript function typeerror invoke


【解决方案1】:

你可以这样做:

function sum(a,b) {
   return arguments.length>1? a+b : function (b) { return a + b };
}

【讨论】:

  • 你最好检查arguments.length是否等于2。sum(1, 0)会失败。
  • 现在通过使用 arguments.length>0 修复
【解决方案2】:

你应该使用curried函数:

function sum(a, b) {
  if (b === undefined) {
    return function (b) {
      return a + b;
    }
  }
  return a + b;
}

// sum(1, 2) === sum(1)(2)

【讨论】:

【解决方案3】:

只能以这种方式调用函数。

sum(2,3);

【讨论】:

  • 为什么?一个函数可以返回另一个函数。
  • 但是在上面的问题中,他们没有返回函数。这就是我说的原因。
  • 我相信这就是 OP 寻求帮助的原因 :) 他不能以他想要的方式调用他的函数。为什么?怎么修?您的回答只给出了他的代码不起作用的声明。
猜你喜欢
  • 2018-01-22
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 2017-03-28
  • 1970-01-01
  • 2017-01-24
相关资源
最近更新 更多