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我不明白你的意思?我明白了,伙计。。