函数提升与变量提升比较类似,是指函数在声明之前即可被调用。

    1. <script>
    2. // 调用函数
    3. foo();
    4. // 声明函数
    5. function foo() {
    6. console.log('声明之前即被调用...');
    7. }
    8. // 不存在提升现象
    9. bar();
    10. var bar = function () {
    11. console.log('函数表达式不存在提升现象...');
    12. }
    13. </script>

    课堂代码:

    1. // ------------------------- 简单体会函数提升 -----------------------
    2. // 代码运行时,会将函数的声明和创建提升到当前作用域的最前面(还要在提升的变量之前)
    3. // fn()
    4. // console.log(111)
    5. // console.log(222)
    6. // function fn() {
    7. // console.log('我会被提升到当前作用域的最前面')
    8. // }
    9. // -------------------------- 函数表达式 --------------------------
    10. // 函数表达式,实际上就是一个变量的声明,所以没有这样的函数提升,有的只是变量提示
    11. // fn1() // 报错,表达式函数,只是一个变量而已,不具有函数提示特点
    12. // let a = 1
    13. // let fn1 = function () {
    14. // console.log('我是函数,只是一个变量的值而已,所以把我当做变量对待')
    15. // }
    16. // ----------------------- 函数提升和变量提升同时存在 ------------------
    17. // 如果变量提升和函数提示同时存在,则函数提升更靠前
    18. console.log(abc) // 函数abc
    19. var abc = 100
    20. function abc() {
    21. console.log('我是函数')
    22. }
    23. console.log(abc) // 100
    24. // ----------------------- 重新声明变量(不给值),则不会影响变量原来的值 ----------------
    25. // var a = 100
    26. // var a // 再次声明变量,但是没有给值,所以不会改变变量原来的值
    27. // console.log(a) // 100

    总结:

    1. 函数提升能够使函数的声明调用更灵活
    2. 函数表达式不存在提升的现象
    3. 函数提升出现在相同作用域当中