简要解释一下,在JavaScript编程语言中,提升的意思是什么?
在执行你的代码之前,JavaScript会对其进行解析,并将其发现的每个函数和变量声明添加到自己的内存中,并将其保存在内存中。这就是所谓的提升。
我们对函数声明和函数表达式有一些不同的行为。
对于函数声明,我们可以在它被定义之前调用一个函数,而我们的代码就可以工作。在其他情况下,我们会出现错误。
一个一般的经验法则是,在使用函数、变量、对象和类之前,总是先定义它们,以避免出现意外。
假设我们有一个函数。
function bark() {
alert('wof!')
}
由于提升,我们在技术上可以在它被声明之前调用bark() 。
bark()
function bark() {
alert('wof!')
}
对于函数,这只发生在函数的声明中。就像上面的情况一样。
而对于函数表达式则不然。
这是一个函数表达式。
bark()
var bark = function() {
alert('wof!')
}
在这种情况下,var 声明被吊起,并以undefined 为值进行初始化,类似这样的情况。
var bark = undefined
bark()
bark = function() {
alert('wof!')
}
运行这段代码会得到一个TypeError: bark is not a function 的错误。
const 和 声明也被挂起,但它们不像 那样被初始化为未定义。let var
const bark = function() {
alert('wof!')
}
或
let bark = function bark() {
alert('wof!')
}
在这种情况下,如果你在声明之前调用bark() ,会给你一个ReferenceError: Cannot access 'bark' before initialization 的错误。
同样的情况也会发生在任何其他将对象或类分配给变量的表达式上
类声明的工作方式与let 和const 声明类似:它们被吊起,但没有被初始化,在声明之前使用一个类将会产生一个ReferenceError: <Class> is not defined 错误。