Javascript JS计算器指南,不断获取;“未定义”;

Javascript JS计算器指南,不断获取;“未定义”;,javascript,Javascript,我正在遵循一个用JavaScript制作计算器的指南,但我仍停留在第一个练习上。它一直说,e没有定义。当我定义它时,它总是说“key”没有定义。如果我试图定义它,我会得到ReferenceError:在初始化之前无法访问词法声明key'` 代码如下: const calculator = document.querySelector(`.calculator`) const keys = calculator.querySelector(`.calculator__keys`) keys.

我正在遵循一个用JavaScript制作计算器的指南,但我仍停留在第一个练习上。它一直说,
e
没有定义。当我定义它时,它总是说“key”没有定义。如果我试图定义它,我会得到
ReferenceError:在初始化之前无法访问词法声明
key'`

代码如下:

const calculator = document.querySelector(`.calculator`)
const keys = calculator.querySelector(`.calculator__keys`)



keys.addEventListener(`click`, e => {
    if (e.target.matches(`button`)) {

       // do something
    }
})

const key = e.target
const action = key.dataset.action


if (!action) {
    console.log('number key!')
  }
  if (
    action === 'add' ||
    action === 'subtract' ||
    action === 'multiply' ||
    action === 'divide'
  ) {
    console.log('operator key!')
  }

  if (action === 'decimal') {
    console.log('decimal key!')
  }

  if (action === 'clear') {
    console.log('clear key!')
  }

  if (action === 'calculate') {
    console.log('equal key!')
  }

您正在尝试访问click事件处理程序回调之外的
e
<代码>e表示事件。单击特定元素时,将创建该事件对象并将其传递给回调函数。在外部访问该事件将抛出一个错误。

将's'更改为',这不是必需的,但我还建议将e放入()。但主要的一点是,您的代码需要在事件处理程序中,否则“e”在该上下文之外没有任何意义

这样做:

const calculator = document.querySelector('.calculator')
const keys = calculator.querySelector('.calculator__keys')

keys.addEventListener('click', (e) => {
    if (e.target.matches('button')) {
        const key = e.target
        const action = key.dataset.action

        if (!action) {
            console.log('number key!')
        }
        if (
            action === 'add' ||
            action === 'subtract' ||
            action === 'multiply' ||
            action === 'divide'
        ) {
            console.log('operator key!')
        }

        if (action === 'decimal') {
            console.log('decimal key!')
        }

        if (action === 'clear') {
            console.log('clear key!')
        }

        if (action === 'calculate') {
            console.log('equal key!')
        }
    }
});

提示:使用引号而不是平铺键。此外,如何在处理程序外部定义e.target?
const key=e.target
超出了事件回调的范围,因此JS不知道什么是
e
。你需要把这个放在你的回叫里。你能不能也把你的信寄出去HTML@NickParsons我遵循的整个指南。我不知道它的范围,我们目前正在讲座中讨论这个问题,但我总是通过这样做来学习。谢谢觉得很奇怪他这么做了though@dux8啊,我明白了。他们可能犯了一个错误,当时没有意识到