javascript中的回调问题

时间:2016-03-12 09:51:22

标签: javascript function callback

我正在玩回调并遇到了这个问题,不确定它与回调的相关程度,但我无法解释结果,任何帮助都会非常感激。

结果如何:'hi samsamsamsamsamsamsamsamsamsamsamsam'

我希望:'hi sam'

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

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

当我致电addSam(speak)时, 控制台返回:

'hi samsamsamsamsamsamsamsamsamsamsamsam'

为什么名字+ ='sam'多次发生?

我应该如何更改代码,这样只发生一次,我可以简单地输出:

hi sam

2 个答案:

答案 0 :(得分:2)

这是因为变量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

答案 1 :(得分:2)

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

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