Javascript js回调给出了未定义的变量以及如何定义回调

Javascript js回调给出了未定义的变量以及如何定义回调,javascript,callback,Javascript,Callback,我有简单的代码: <div id='temp'></div> <div id='points'></div> <div onClick ="play(1, 1)" id='click'>clickclickclick</div> play(function (addpoints) { document.getElementById('temp').innerHTML = addpoints; }()); f

我有简单的代码:

<div id='temp'></div>
<div id='points'></div> 
<div onClick ="play(1, 1)" id='click'>clickclickclick</div> 


play(function (addpoints) {
    document.getElementById('temp').innerHTML = addpoints;
}());

function play (choosecolor, randescolor) {
    if (choosecolor == randescolor) {
        if (document.getElementById('points').innerHTML === '') {
            document.getElementById('points').innerHTML=100;
        }
        else {
            var points = function (allpoints) {
                var addpoints = parseInt(allpoints) + 100;
                callback(addpoints);

                document.getElementById('points').innerHTML=addpoints;
            }
        }

        points(document.getElementById('points').innerHTML);
    }
}
loadStuff(function (data) {
    alert('Now we have the data' + data);
});

function loadStuff (callback) {
    // Go off and make an XHR or a web worker or somehow generate some data
    var data = 'something';
    callback(data);
}

我认为回调()有一些我不知道也不理解的地方。但是什么呢?为什么它可以在代码的第二部分工作,而不能在第一部分正常工作

名为
callback
的变量未在代码中定义,但在上一个代码段中,确实有一个变量
callback
作为函数参数

您需要引用正确的参数名称:

function play(choosecolor, randescolor){
    if(choosecolor==randescolor){
        if(document.getElementById('points').innerHTML===''){
            document.getElementById('points').innerHTML=100;}
        else{
            var points = function(allpoints){
                var addpoints=parseInt(allpoints)+100;
                choosecolor(addpoints); // Refer to choosecolor, not callback
                document.getElementById('points').innerHTML=addpoints;
            }
    }

名为
callback
的变量未在代码中定义,但在上一个代码段中,确实有一个变量
callback
作为函数参数

您需要引用正确的参数名称:

function play(choosecolor, randescolor){
    if(choosecolor==randescolor){
        if(document.getElementById('points').innerHTML===''){
            document.getElementById('points').innerHTML=100;}
        else{
            var points = function(allpoints){
                var addpoints=parseInt(allpoints)+100;
                choosecolor(addpoints); // Refer to choosecolor, not callback
                document.getElementById('points').innerHTML=addpoints;
            }
    }

原始代码将按如下方式执行:

播放(功能(添加点){
document.getElementById('temp')。innerHTML=addpoints;
}());

正在执行未命名的内联函数,但没有输入变量。在这种情况下,
addpoints=undefined
。因此,
temp
div将显示文本“未定义”。由于函数不返回任何内容,因此现在使用
choosecolor=undefined,ranescolor=undefined
调用play

使用两个参数的
未定义的
值执行函数播放。第一个if的计算结果为true,代码继续。第二个if的计算结果也为true,并且
div将有文本“100”。接下来,有人试图通过变量
points
的任一名称调用函数,但由于两者都不存在,因此会出现异常


原始代码将按如下方式执行:

播放(功能(添加点){
document.getElementById('temp')。innerHTML=addpoints;
}());

正在执行未命名的内联函数,但没有输入变量。在这种情况下,
addpoints=undefined
。因此,
temp
div将显示文本“未定义”。由于函数不返回任何内容,因此现在使用
choosecolor=undefined,ranescolor=undefined
调用play

使用两个参数的
未定义的
值执行函数播放。第一个if的计算结果为true,代码继续。第二个if的计算结果也为true,并且
div将有文本“100”。接下来,有人试图通过变量
points
的任一名称调用函数,但由于两者都不存在,因此会出现异常

--句柄未定义;addpoints==未定义?'':addpoints

play(function (addpoints) {
    document.getElementById('temp').innerHTML = addpoints==undefined ?'':addpoints;
}());

function play (choosecolor, randescolor) {
    if (choosecolor == randescolor) {
        if (document.getElementById('points').innerHTML === '') {
            document.getElementById('points').innerHTML=100;
        }
        else {
            var points = function (allpoints) {
                var addpoints = parseInt(allpoints) + 100;
                callback(addpoints);

                document.getElementById('points').innerHTML=addpoints;
            }
        }

        points(document.getElementById('points').innerHTML);
    }
}
检查小提琴--handle未定义;addpoints==未定义?'':addpoints

play(function (addpoints) {
    document.getElementById('temp').innerHTML = addpoints==undefined ?'':addpoints;
}());

function play (choosecolor, randescolor) {
    if (choosecolor == randescolor) {
        if (document.getElementById('points').innerHTML === '') {
            document.getElementById('points').innerHTML=100;
        }
        else {
            var points = function (allpoints) {
                var addpoints = parseInt(allpoints) + 100;
                callback(addpoints);

                document.getElementById('points').innerHTML=addpoints;
            }
        }

        points(document.getElementById('points').innerHTML);
    }
}

检查fiddle

您的格式不好,我怀疑您的paren/curlies数量不对。可能
play
函数是在另一个函数中定义的,但很难理解。请修复格式(尝试)为什么使用IIFE并将结果传递给
play
?是否尝试使用内联调用函数(接受
addpoints
?)的结果调用函数
play
)您所说的“为什么(我的?)回调可以给我未定义”是什么意思?你能给我解释一下吗?你的格式不好,我怀疑你的帕伦/卷发号码不对。可能
play
函数是在另一个函数中定义的,但很难理解。请修复格式(尝试)为什么使用IIFE并将结果传递给
play
?是否尝试使用内联调用函数(接受
addpoints
?)的结果调用函数
play
)您所说的“为什么(我的?)回调可以给我未定义”是什么意思?你能给我解释一下吗?你的格式不好,我怀疑你的帕伦/卷发号码不对。可能
play
函数是在另一个函数中定义的,但很难理解。请修复格式(尝试)为什么使用IIFE并将结果传递给
play
?是否尝试使用内联调用函数(接受
addpoints
?)的结果调用函数
play
)您所说的“为什么(我的?)回调可以给我未定义”是什么意思?你能给我解释一下吗?