我正在玩回调并遇到了这个问题,不确定它与回调的相关程度,但我无法解释结果,任何帮助都会非常感激。
结果如何:'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
答案 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);
}