我只想从中获取返回值,setTimeout但我得到的是函数的整个文本格式?
function x () {
    setTimeout(y = function () {
        return 'done';
    }, 1000);
    return y;
}
console.log(x());
我只想从中获取返回值,setTimeout但我得到的是函数的整个文本格式?
function x () {
    setTimeout(y = function () {
        return 'done';
    }, 1000);
    return y;
}
console.log(x());
为此,您需要使用 Promise。它们在 ES6中可用,但可以很容易地填充:
function x() {
   var promise = new Promise(function(resolve, reject) {
     window.setTimeout(function() {
       resolve('done!');
     });
   });
   return promise;
}
x().then(function(done) {
  console.log(done); // --> 'done!'
});
在 ES2017 中使用async/await在async函数内部会变得更好:
async function() {
  const result = await x();
  console.log(result); // --> 'done!';
}
您无法从传递给 的函数中获得返回值setTimeout。
调用setTimeout(x在您的示例中)的函数将在您传递给的函数setTimeout甚至被调用之前完成执行并返回。
无论您想对获得的值做什么,都需要从传递给setTimeout.
在您的示例中,这将写为:
function x () {
    setTimeout(function () {
        console.log("done");
    }, 1000);
}
x();
最好对函数x以及在超时后要执行的任何任务进行回调,然后在该回调中发送。
function x (callback) {
    setTimeout(function () {
        callback("done");
    }, 1000);
}
x(console.log.bind(console)); //this is special case of console.log
x(alert) 
您可以像下面的示例一样使用 Promise 和 setTimeOut 的组合
let f1 = function(){
    return new Promise(async function(res,err){
        let x=0;
        let p = new Promise(function(res,err){
            setTimeout(function(){
                x= 1;
                res(x);
            },2000)
        })
        p.then(function(x){
            console.log(x);
            res(x);
        })
    });
}
我想你想要知道事件发生与否的标志。setTimeout 不返回值。您可以使用变量来检测事件是否发生
var y="notdone";
   setTimeout(function () {
         y="done";
    }, 1000);
您可以在超时发生后访问变量 y 以了解完成与否