【问题标题】: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】:

    回调函数接受usernamepassword 参数,但您从不将它们作为参数传递。

    您可以为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 回调隐藏了 userNamepassword 变量。您可以从 setTimeout 回调的参数中删除它们,或者将它们作为参数添加到 setTimeout 调用中,如下所示:

      setTimeout((userName, password) => {
          console.log("Iam inside the setTimeOut function");
          callback({
            userName: userName,
            password: password
          });
        }, 3000, userName, password)
      

      【讨论】:

      • 谢谢你的回答我没看到
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多