翼度科技»论坛 编程开发 JavaScript 查看内容

js 函数声明和函数表达式的执行结果

10

主题

10

帖子

30

积分

新手上路

Rank: 1

积分
30
  1. // var 定义的变量会进行变量提升,声明被拿到函数或全局作用域的顶端,并输出 undefined
  2. // 函数声明也会进行提升,var 的变量提升会覆盖函数声明提升
  3. console.log("=====0======")
  4. var fn = function () {
  5.   console.log("fn0-1")
  6. }
  7. fn()
  8. var fn = function () {
  9.   console.log("fn0-2")
  10. }
  11. fn()
  12. function fn() {
  13.   console.log("fn0-3")
  14. }
  15. fn()
  16. function fn() {
  17.   console.log("fn0-4")
  18. }
  19. fn()
  20. // fn0-1
  21. // fn0-2
  22. // fn0-2
  23. // fn0-2
  24. console.log("=====1======")
  25. try {
  26.   fn1()
  27. } catch (error) {
  28.   console.log(error)
  29. }
  30. var fn1 = function () {
  31.   console.log("fn1-1")
  32. }
  33. // Uncaught TypeError: fn1 is not a function
  34. console.log("====2=======")
  35. // 函数声明会提升,可以直接在函数定义之前执行函数,后面定义的函数声明会覆盖前面的函数声明
  36. function fn2() {
  37.   console.log("fn2-1")
  38. }
  39. fn2()
  40. function fn2() {
  41.   console.log("fn2-2")
  42. }
  43. fn2()
  44. // fn2-2
  45. // fn2-2
  46. console.log("=====3======")
  47. fn3()   // 函数声明提升,走最后一个函数声明的结果
  48. var fn3 = function () {
  49.     console.log("fn3-1")
  50. }
  51. function fn3() {
  52.   console.log("fn3-2")
  53. }
  54. fn3()  // var 声明提升覆盖函数声明提升
  55. function fn3() {
  56.   console.log("fn3-3")
  57. }
  58. fn3() //  var 声明提升覆盖函数声明提升
  59. // fn3-3
  60. // fn3-1
  61. // fn3-1
  62. console.log("=====5======")
  63. var fn5 = function () {
  64.   console.log("fn5-1")
  65. }
  66. fn5()
  67. var fn5 = function () {
  68.   console.log("fn5-2")
  69. }
  70. fn5()
  71. // fn5-1
  72. // fn5-2
  73. // 总结:函数表达式相对于函数声明的一个重要区别是函数声明在代码解析阶段就会被提升(函数声明提升),而函数表达式则需要在赋值语句执行到达时才会创建函数对象
复制代码
参考:https://juejin.cn/post/7237051958993469496
推荐:看 《你不知道的 JavaScript》,里面有详细的 js 执行细节,看完很有收获。

来源:https://www.cnblogs.com/beileixinqing/p/17463489.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具