关于高阶函数内变量作用域的问题

#1
var loader=new THREE.FileLoader();
var data;
loader.load('test.txt',function (value) {
   data=value
});

console.log(data);

我想用FileLoader来读取一个本地txt文件,然后用里面的数据生成点云,但是编译器告诉我data 这个变量undefined

这是什么情况?明明我已经在函数里面给它赋值了呀

#2

loader.load在执行完成,也就是读取本地txt文件成功后,才会去执行你的函数给data赋值,这个异步。
而console.log是同步,立马执行,此时data只是声明啦,还未赋值,js引擎会默认给它赋予undefined

#3
async function main(){
    var loader = new THREE.FileLoader();
    var data =  await new Promise((resolve)=> loader.load("test.txt", resolve))
    console.log(data)
}

loader.load 估计是异步的, 要想写的同步的话要用 async await + promise