【发布时间】:2019-12-13 01:55:21
【问题描述】:
我只是实现了一个在单击按钮后调用的函数。该函数工作正常,但我无法让它返回一个值并将其分配给一个变量。
我想在单击按钮后调用函数play,然后将值(如代码所示)返回给变量,以便将来使用它们。
我已经实现了我需要的所有东西(我正在搞乱网络音频 api)并且它工作正常,test1 变量“嵌入”了osc 和 lfo 变量,我能够在函数之外访问它们。
var ac = new AudioContext();
function play(){
var osc = ac.createOscillator();
var lfo = ac.createOscillator();
osc.frequency.value=1000;
console.log("Clicked!!");
returnedObject={};
returnedObject["value1"] = osc;
returnedObject["value2"] = lfo;
return returnedObject;
};
var test1= play();
var test= document.getElementById("mybtn").addEventListener("click", play);
test1 变量包含我需要的内容,但 test 变量没有。
如何在事件调用函数的返回对象后将其分配给变量?
如果我使用test.value1,我现在得到的是undefined 错误,这让我认为变量的分配失败。
【问题讨论】:
-
addEventListener确实 not 返回回调结果,因为它不是同步的。它只是绑定事件,您应该直接在play函数中分配值。 developer.mozilla.org/en-US/docs/Web/API/EventTarget/… 按设计返回undefined,并且有意这样做。 -
你期待什么?在单击按钮之前,不会调用事件处理程序的
play。 javascript 不会阻止。 -
@briosheje 所以我应该创建一个变量,当它被监听器调用时将它传递给播放函数,然后在播放函数内部分配值,对吧?
-
@MattiaSurricchio 不,您应该将值分配给全局
test变量inside 您的play回调。 -
@MattiaSurricchio 我建议你使用闭包而不是污染全局命名空间。请参阅下面的代码
标签: javascript function button listener