Javascript在单击时传递变量

Javascript在单击时传递变量,javascript,Javascript,我正在学习JS并在函数之间传递变量。我试图在单击时执行函数,同时在函数之间传递变量。我可以通过在页面加载时执行函数来传递变量,但不能通过单击函数来传递 function getData() { let xmlhttp = new XMLHttpRequest(); let url = "https://jsonplaceholder.typicode.com/posts"; xmlhttp.onreadystatechange = function() {

我正在学习JS并在函数之间传递变量。我试图在单击时执行函数,同时在函数之间传递变量。我可以通过在页面加载时执行函数来传递变量,但不能通过单击函数来传递

function getData() {
    let xmlhttp = new XMLHttpRequest();
    let url = "https://jsonplaceholder.typicode.com/posts";
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            myArr = JSON.parse(this.responseText);
            //myFunction(myArr); 
            document.getElementById("start2").addEventListener("click", myFunction(myArr));
        }
    };
    xmlhttp.open("GET", url, true);
    xmlhttp.send();
}

getData();


function myFunction(arr) {
    //  var arr = getData();
    var out = "";
    var i;
    for (i = 0; i < arr.length; i++) {
        out += '<p>' + arr[i].id + '</p><br>';
    }
    document.getElementById("answer-holder").innerHTML = out;
}
函数getData(){ 设xmlhttp=newxmlhttprequest(); 让url=”https://jsonplaceholder.typicode.com/posts"; xmlhttp.onreadystatechange=函数(){ if(this.readyState==4&&this.status==200){ myArr=JSON.parse(this.responseText); //myFunction(myArr); document.getElementById(“start2”).addEventListener(“单击”,myFunction(myArr)); } }; open(“GET”,url,true); xmlhttp.send(); } getData(); 函数myFunction(arr){ //var arr=getData(); var out=“”; var i; 对于(i=0;i
'; } document.getElementById(“答案持有者”).innerHTML=out; }
它不起作用,因为
addEventListener
需要一个函数作为它的第二个参数。但您不提供函数。而是提供计算
myFunction
的结果,这是
未定义的
(因为
myFunction
不返回任何内容)

您可以通过提供一个函数来修复代码,该函数使用您选择的参数调用
myFunction

document.getElementById("start2").addEventListener("click", function() {
   myFunction(myArr);
});

问题是您在尝试设置onClick侦听器时调用了该函数:

document.getElementById("start2").addEventListener("click", myFunction(myArr));
正如Thomas所建议的,您必须向addEventListener传递一个函数。但是,我建议使用更新的lambda表示法:

document.getElementById("start2").addEventListener("click", () => myFunction(myArr));

这是很棒的回答,谢谢你的解释,因为这有助于我学习。Cheers@insomniac22没问题,很乐意帮忙!
document.getElementById("start2").addEventListener("click", () => myFunction(myArr));