javascript中的回调问题

javascript中的回调问题,javascript,function,callback,Javascript,Function,Callback,我在玩回调时遇到了这个问题,不确定它与回调有多大关系,但我无法解释结果,任何帮助都将不胜感激 结果是什么:'hi samsamsamsam' 我希望:“你好,山姆” 当我打电话给addSam(speak)时, 控制台返回: “你好,山姆” 为什么name+=“sam”会出现多次 我应该如何更改代码,使其只发生一次,并且可以简单地输出: hi sam这是因为变量name是在addSam函数中定义的,因此它只能在该函数中访问,不能全局访问 如果您希望函数在调用时输出hi sam,addSam(sp

我在玩回调时遇到了这个问题,不确定它与回调有多大关系,但我无法解释结果,任何帮助都将不胜感激

结果是什么:
'hi samsamsamsam'

我希望:
“你好,山姆”


当我打电话给addSam(speak)时, 控制台返回:

“你好,山姆”

为什么name+=“sam”会出现多次

我应该如何更改代码,使其只发生一次,并且可以简单地输出:


hi sam

这是因为变量
name
是在
addSam
函数中定义的,因此它只能在该函数中访问,不能全局访问

如果您希望函数在调用时输出
hi sam
addSam(speak)
,请在函数外部定义
name
变量,以便全局访问。像这样:

var name = '';
function addSam(cb){
    setTimeout(function(){
        name += 'sam';
        cb();
    }, 1000);
}

function speak(){
    console.log('hi ' + name);
}

addSam(speak); // outputs 'hi sam' after a second

这是因为变量
name
是在
addSam
函数中定义的,因此它只能在该函数中访问,不能全局访问

如果您希望函数在调用时输出
hi sam
addSam(speak)
,请在函数外部定义
name
变量,以便全局访问。像这样:

var name = '';
function addSam(cb){
    setTimeout(function(){
        name += 'sam';
        cb();
    }, 1000);
}

function speak(){
    console.log('hi ' + name);
}

addSam(speak); // outputs 'hi sam' after a second

您的代码将只打印
“hi”
。我敢肯定这是不可能的,至少你发了代码。我很确定你还有别的东西,你不能在这里摆姿势。或者您缺少
var name=''在您的真实代码中。对不起,我应该已经清楚了,我运行:addSam(speak)在这之后,这会在控制台中打印出“hi samsamsam”。您的代码将只打印
“hi”
。我敢肯定这是不可能的,至少你发了代码。我很确定你还有别的东西,你不能在这里摆姿势。或者您缺少
var name=''在你的真实代码中。对不起,我应该已经清楚了,我运行:addSam(speak)在这个结尾,它在控制台中打印出“hi samsam”
function addSam(cb){
    var name = '';
    setTimeout(function(){
        name += 'sam';
        cb(name);
    }, 1000);
}

function speak(name){
    console.log('hi ' + name);
}