javascript - 事件触发函数的返回值

标签 javascript function button listener

我只是实现一个在单击按钮后调用的函数。该函数工作正常,但我无法让它返回一个值并将其分配给一个变量。

我想在单击按钮后调用函数play,然后将值(如代码所示)返回到变量,以便将来使用它们。

我已经实现了我需要的所有内容(我正在摆弄网络音频API)并且它工作正常,test1变量“嵌入”了osclfo 变量,我可以在函数外部访问它们。

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,我现在得到的是一个未定义错误,这让我认为变量的分配失败了。

最佳答案

答案:

您可以执行此操作,但必须考虑到该值在单击按钮之前是未定义

var ac = new AudioContext();

function play(){
     var osc = ac.createOscillator();
     var lfo = ac.createOscillator();
     console.log("Clicked!!");
     returnedObject={};
     returnedObject["value1"] = osc;
     returnedObject["value2"] = lfo;
     return returnedObject;
};

var test;
document.getElementById("mybtn").addEventListener("click", () => (test = play()));
<button id="mybtn">click me</button>

<小时/>

为了使用数据执行函数,您可能需要创建一个中间函数来处理您想要完成的任何工作:

var ac = new AudioContext();

function play(){
     var osc = ac.createOscillator();
     var lfo = ac.createOscillator();
     console.log("Clicked!!");
     returnedObject={};
     returnedObject["value1"] = osc;
     returnedObject["value2"] = lfo;
     return returnedObject;
};

function middle(fn) {
return function() {
let data = fn();

//do something
console.dir(data);
}
}

document.getElementById("mybtn").addEventListener("click", middle(play));
<button id="mybtn">click me</button>

<小时/>

或者,您可以创建一个保存数据的构造函数,从而允许您向构造函数添加方法以便稍后进行操作:

function Player() {
  let proto = {};
  proto.ac = new AudioContext();
  proto.data = [];
  proto.play = function() {
    var osc = proto.ac.createOscillator();
    var lfo = proto.ac.createOscillator();
     proto.data.push({
      value1: osc,
      value2: lfo
    });
 proto.latest = proto.data[proto.data.length-1];
        console.log("Clicked!!", proto.latest);
  };
  

  return proto;
}

const myPlayer = new Player();

document.getElementById("mybtn").addEventListener("click", myPlayer.play);
<button id="mybtn">click me</button>

关于javascript - 事件触发函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57360336/

相关文章:

java - 我在尝试制作随机歌曲播放器时失败了

android - 在android上按下按钮时如何打开空白的html页面

javascript - 未选取 D3 数组对象格式

javascript - CSS 动态子菜单显示不正确

javascript - 如何让用户安全地输入JavaScript函数?

php - 如何减少 PHP 中的代码行数?

c++ - 调用成员 C++ 函数但 C 函数具有相同的名称

javascript - 使用 HTML5/JS 的移动设备后置摄像头

javascript - 在 AngularJS 中解析类似于 Handlebars 的模板?

Android Studio 不显示按钮的属性