【问题标题】:Calling a frunction from another function with addEventListener使用 addEventListener 从另一个函数调用一个函数
【发布时间】:2021-08-24 08:26:35
【问题描述】:

这是我第一次提出与代码相关的问题。

我遇到的问题如下:我正在尝试使用纯 JavaScript 构建一个计算器。我创建了加法、减法等函数,还创建了一个名为operate() 的函数,它接受三个参数:运算和将要运算的两个数字。

例子:

function add(num1, num2) {
    return num1 + num2;
}

function subtract(num1, num2) {
    return num1 - num2;
}

function operate(operation, num1, num2) {
    return operation(num1, num2);
}

Operate() 工作正常,但问题是我试图用 addEventListener 调用它,但它不起作用。

在我将数字和操作存储在全局变量中之后(假设我在 operator 变量中有 add,并且 12 和 8 作为 num1num2),我正在尝试这样做:

equalButton.addEventListener('click', function (e) {
    const result = operate(operator, num1, num2);
    console.log(result);
});

但它说 Uncaught TypeError: operation is not a function 并且它指向函数operate()。

我似乎看不出问题出在哪里,我猜它会很简单,但我的大脑并没有让我解决问题所在。

【问题讨论】:

  • 您能分享一下您是如何将add 存储在operator 变量中的吗?
  • 我先用 let num 1 创建全局变量;或让操作员;然后在用户单击按钮时更新值。
  • 您如何更新operator 的值,您可以显示该代码吗?
  • operatorButtons.forEach(button => button.addEventListener('click', function (e) { operation = e.target.value; })); 但没关系,我设法通过一些 if else 语句完成了我的工作。感谢您的帮助。

标签: javascript function events scope


【解决方案1】:

当您注意到您的操作函数时,您从未创建过操作函数,因此程序不知道它,因此当您调用操作函数时,您应该调用作为参数传递的基于加法和减法函数的运算符,因此它应该如下所示:

function operate(operation, num1, num2) {
   if(operation === '+')
      return add(num1,num2);
  else 
     return subtract(num1,num2);
}

请注意,这不是算术运算的有效解决方案,似乎您是初学者,请先尝试实现您正在做的事情,然后再改进它。最好创建单个函数并在 switch case 或 if 条件中传递运算符并相应地执行操作:)

【讨论】:

  • operation 在 OP 的情况下应该是一个可以调用的函数。它不是字符串,因此无法与字符串进行比较...
  • 我明白了,我明白...然后我认为操作可以运行 add(12,8)。
  • 好的。我想如果我完全删除操作()并且只使用基本操作功能本身,我会过得更好。谢谢你:)
猜你喜欢
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 2021-11-19
相关资源
最近更新 更多