Javascript 起重机是如何工作的?函数与变量的区别

Javascript 起重机是如何工作的?函数与变量的区别,javascript,hoisting,Javascript,Hoisting,我可以知道这个代码是如何执行的吗 功能范围(){ 返回主机; 函数宿主(){ var托管='15'; } var=12; } log(typeof scope())当JS提升函数时,它将知道返回实际函数,但当它是一个变量声明时,它将以未定义的作为值来提升它。除非到达实际的赋值行,否则它不会有值。当JS提升函数时,它会知道返回实际函数,但当它是变量声明时,它会以未定义的作为值提升它。除非到达实际赋值行,否则它不会有值。它不会返回数字12,因为提升仅用于声明实际变量,而不是为其赋值 这意味着编译器

我可以知道这个代码是如何执行的吗

功能范围(){
返回主机;
函数宿主(){
var托管='15';
}
var=12;
}

log(typeof scope())
当JS提升函数时,它将知道返回实际函数,但当它是一个变量声明时,它将以
未定义的
作为值来提升它。除非到达实际的赋值行,否则它不会有值。

当JS提升函数时,它会知道返回实际函数,但当它是变量声明时,它会以
未定义的
作为值提升它。除非到达实际赋值行,否则它不会有值。

它不会返回数字12,因为提升仅用于声明实际变量,而不是为其赋值

这意味着编译器的代码如下所示:

function scope() {
    var hosting;
    return hosting;

    hosting=12;
}


另外请记住,返回后的所有操作都不会执行。

它不会返回数字12,因为提升
仅用于声明实际变量,而不是为其赋值

这意味着编译器的代码如下所示:

function scope() {
    var hosting;
    return hosting;

    hosting=12;
}


另外,请记住,返回后的所有内容都不会执行。

如果您希望console.log返回数字,则应将宿主声明放在返回上方,如下所示:

功能范围(){
var=12;
返回主机;
}

console.log(typeof scope())
如果希望console.log返回数字,则应将宿主声明放在返回上面,如下所示:

功能范围(){
var=12;
返回主机;
}

console.log(typeof scope())
它(不是宿主)。但是仍然使用
var
而不是
let
const
确实没有很好的理由。糟糕,我被遗留代码卡住了(没有托管)。但是没有什么好的理由仍然使用
var
而不是
let
const
。糟糕,我一直在使用遗留代码,我知道,我以为这就是你想要的,也许我不明白你的问题看下面的评论,这是我想问的,我想这就是你要问的,也许我不明白你的问题看下面的评论,这不是我要问的,但是在fn中,我们得到了返回语句之前的整个函数,对吗?@SelvaGanapathi我不明白你的意思?我明白了,伙计..很好,但是在fn中,我们在返回语句之前得到了整个函数,对吗?@SelvaGanapathi我不明白你的意思?我明白了,伙计。。