【问题标题】:How is it possible to return something to a function called by an Event Listener?如何将某些内容返回给事件侦听器调用的函数?
【发布时间】:2020-08-31 23:40:05
【问题描述】:

如果函数被事件监听器调用,是否可以返回函数的结果?我尝试了很多方法,但没有任何效果。令我惊讶的是,没有太多关于它的信息可以帮助我。我想传入当前分数,当事件发生时将其加一并返回。显然,我在下面所做的将不起作用,因为 a) return 语句没有存储空间,b) 它由事件侦听器调用。我唯一要做的就是更改函数内的全局变量。我知道如果包裹在 IIFE 或它自己的封闭装置中不会那么有害,但我仍然不想养成这样做的习惯。无论如何将分数增加1而不是直接引用函数内部的全局分数变量,谢谢所有

const btn = document.querySelector('#btn');

let score = 0;

btn.addEventListener('click', function () {

    increaseScore(score); // passing in the current score varialble
})


function increaseScore(currentScore) { 

    currentScore++;
    return currentScore;      // there is nowhere to return this!!

}

【问题讨论】:

  • score = increaseScore(score)。真的与事件处理程序无关
  • 是的,我知道我可以这样做,但我只想在按下按钮时增加分数?当然 score = increaseScore(score) 会立即调用该函数并增加分数,但我不想这样做?
  • 哦,不,我删除了最后一个错误的帖子,说我把事情搞混了,很抱歉,你能重新发布吗?
  • 返回任何东西都没有意义.... 为什么需要返回任何东西?如果您希望变量 score 增加,您应该做其他事情,因为您没有更新全局变量。不知道你从哪里知道在函数中更新全局是不好的。
  • 不在事件处理程序内部,它不会立即被调用,只有当事件发生时......只需在你现在编写的方式前面添加score =

标签: javascript function return global-variables addeventlistener


【解决方案1】:

诀窍是你需要绑定上下文(this)

  someMethod.bind(this);

const btn = document.querySelector('#btn');
const scoreBtn = document.querySelector('#score');

let score = 0;


btn.addEventListener('click', function() {
  event.preventDefault();
  someMethod.bind(this);
  score = someMethod(score);
});

scoreBtn.addEventListener('click', function() {
  event.preventDefault();
  console.log(score);
});

function someMethod(cur) {
 return cur + 1; 
}
<button id="btn">Update Score</button>
<button id="score">Show Score</button>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-17
    • 2020-01-18
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2020-06-10
    相关资源
    最近更新 更多