此函数接收对象参数,如{'status':'info'},但我无法在某些回调中访问它。它不应该像所有代码块的全局变量一样吗?:
var msg = {
status: 'good',
data: 'cats'
};
function status(msg) {
console.log(msg.status);
doSomething(msg.data, function(err, reply) {
doSomething2(reply, function(err, data) {
switch(msg.status) { // error: cannot get status of undefined
case 'info':
console.log('Cat info.');
}
});
});
}
function doSomething(data, cb) {
return 'burdz';
}
function doSomething2(data, cb) {
return data + ' and dogs';
}
status();
在切换案例中访问消息的对象属性时出错。我可以在doSomething函数之前访问该属性,但不能访问最后一个属性。
答案 0 :(得分:0)
const msg = {
status: 'good',
data: 'cats'
};
function status(msg) {
console.log(msg.status);
doSomething(msg.data, function(err, reply) {
doSomething2(reply, function(err, data) {
switch(msg.status) {
case 'info':
console.log('Cat info.');
}
});
});
}
function doSomething(data, cb) {
return 'burdz';
}
function doSomething2(data, cb) {
return data + ' and dogs';
}
status(msg);

您需要将某些内容传递给状态!如果您的msg在全局状态
中声明,请使用const而不是let关于范围和关闭的有趣讲座。 https://github.com/getify/You-Dont-Know-JS/tree/master/scope%20%26%20closures