函数实际上是在变量之前提升的吗?



有人在Discord上给我发了这张照片,说函数首先被提升,然后是变量。

print .sc/xdwc9a(请删除点前的空格,我不想发垃圾邮件)

他的陈述似乎是正确的,因为函数被调用时没有抛出任何错误。

Kyle Simpson在他的YDKJS书中也说了同样的话:

  • ly/39位wolka

然而,当我用它进行实验时,我没有得到我所期望的。Logger ()//10

function logger(){
var x = 10;
function x(){
console.log('Function code')
}
function x(){
console.log("more code")
}
console.log(x)
}

返回10,但是由于函数首先被提升,x函数应该被提升,并且在第二次提升(提升变量)时,它试图提升var x;它应该忽略它,因为函数x已经被提升了,但这里似乎不是这样!

我错过了什么吗?

想象一下吊装的情景,我是这样想的。

注意,如果标识符用于函数,随后重新声明var a没什么区别。仍然引用同一个函数

function a(){console.log('hello')}
console.log(typeof a);     //function
var a;
console.log(typeof a);     //function
a();                       //hello

同样,如果标识符a如果用于函数,则该标识符可以重新分配为一个数字。

'use strict';
function a(){}
console.log(typeof a);     //function
a = 123;
console.log(typeof a);     //number

即使在严格模式下,函数的声明似乎也允许在没有var的情况下使用该标识符。或.

获取日志代码,并将嵌套函数和var x移到顶部,按照提升模型

function logger(){
function x(){                     //hoisted at compile time
console.log('Function code')
}
function x(){                     //hoisted at compile time
console.log("more code")
}
var x;                            //hoisted at compile time
//execution time code
x = 10;
console.log(x)
}
logger();
console.log(x)x线,是10号。

变量和函数一样首先被提升。但是当变量首先被提升时,它们的值是undefined。另一方面,函数声明(不是表达式或IIFE)与其内容一起被提升。

这里是从MDN吊装的

相关内容

  • 没有找到相关文章

最新更新