- 函数提升是指函数在声明之前即可被调用。
- 在执行之前,会在当前作用域内,将所有函数声明提升到当前作用域的最前面。函数提升出现在相同作用域中。
- 只提升函数声明,不提升函数调用。
- 函数表达式必须先声明赋值,后调用,否则报错,即函数表达式不存在提升现象。
- 提倡先声明函数,然后再调用。
示例
正常的函数提升
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
fn()
function fn() {
console.log('函数提升')
}
</script>
</body>
</html>
函数表达式先使用后声明报错
下面示例中
fun()
var fun = function () {
console.log('函数表达式')
}
提升以后相当于:
var fun
fun()
fun = function () {
console.log('函数表达式')
}
完整的示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
fun()
var fun = function () {
console.log('函数表达式')
}
</script>
</body>
</html>