function ff(a,b){
    setTimeout(() => {
       return a+b
    }, 3000);  
}
function f(callback){ 
    var x=3,y=4;
    var z=callback(x,y);
    console.log("主函数")
    return z;
}
 console.log(f(ff));//这里返回的是undefined
  

解决方案 »

  1.   

    方法很多,全局变量也行,传参也行,最好的方法是回调函数
    不过你这里面用到了setTimeout,作用域被隔离了,需要重新设计
      

  2.   


        function ff(a, b, cbk) {
            setTimeout(() => {
                cbk(a + b);
            }, 3000);
        }
        function f(callback) {
            var x = 3, y = 4;
            var z = 0;
            callback(x, y, function (re) {
                z = re;
                console.log(z)
            });
            console.log("主函数")
            return z;
        }
        f(ff);
      

  3.   

    因为setTimeout的延迟,原先试图console.log(f(ff));是无论如何都行不通的
      

  4.   

    一是用回调函数function ff(a,b,cbf){
        setTimeout(() => {
           cbf(a+b);
        }, 3000);
    }
    function f(callback,cbf){
        var x=3,y=4;
        var z=callback(x,y,cbf);
    }
    f(ff,function(rv){
    console.log(rv);
    })
      

  5.   

    二是用Promise对象配合async function异步函数function ff(a,b){
    return new Promise(resolve=>{
        setTimeout(() => {
    resolve(a+b);
         }, 3000);
    });
    }
    async function f(callback){
        var x=3,y=4;
        var z= await callback(x,y);
        console.log("主函数")
        return z;
    }
    (async function () {
    console.log(await f(ff));
    })();