【问题标题】:Why I am getting output as undefined?为什么我的输出未定义?
【发布时间】:2020-06-14 16:08:12
【问题描述】:
当我将用户名和密码参数传递给 setTimeout 函数时,为什么我得到 { userName: undefined, password: undefined } 作为最终输出?我从 setTimeout 中删除了它们,然后看到我得到了预期的输出
console.log("Starting");
displayUser = (userName, password, callback) => {
console.log("Iam inside the displayUser function")
setTimeout((userName, password) => {
console.log("Iam inside the setTimeOut function");
callback({
userName: userName,
password: password
});
}, 3000)
}
displayUser("Hasindu", "hasindu123", (user) => {
console.log("Iam inside the call back function");
console.log(user);
});
console.log("end");
【问题讨论】:
标签:
javascript
ajax
callback
【解决方案1】:
回调函数接受username 和password 参数,但您从不将它们作为参数传递。
您可以为setTimeout 提供额外的参数,它们将作为参数传递给回调。
console.log("Starting");
displayUser = (userName, password, callback) => {
console.log("Iam inside the displayUser function")
setTimeout((userName, password) => {
console.log("Iam inside the setTimeOut function");
callback({
userName: userName,
password: password
});
}, 3000, userName, password)
}
displayUser("Hasindu", "hasindu123", (user) => {
console.log("Iam inside the call back function");
console.log(user);
});
console.log("end");
或者你可以省略参数,变量将保存在闭包中。
console.log("Starting");
displayUser = (userName, password, callback) => {
console.log("Iam inside the displayUser function")
setTimeout(() => {
console.log("Iam inside the setTimeOut function");
callback({
userName: userName,
password: password
});
}, 3000)
}
displayUser("Hasindu", "hasindu123", (user) => {
console.log("Iam inside the call back function");
console.log(user);
});
console.log("end");
【解决方案2】:
您的 setTimeout 回调隐藏了 userName 和 password 变量。您可以从 setTimeout 回调的参数中删除它们,或者将它们作为参数添加到 setTimeout 调用中,如下所示:
setTimeout((userName, password) => {
console.log("Iam inside the setTimeOut function");
callback({
userName: userName,
password: password
});
}, 3000, userName, password)