Javascript的预解析
浏览器不是直接运行JS的,是调用js引擎运行js.
js引擎运行js分为两个步骤:
1.预解析 :js引擎会把js里面所有的var,以及所有的function提升到当前作用域的最前面
2.代码执行 :按照代码的书写顺序从上往下执行
预解析:
变量预解析--变量提升,就是把所有的变量声明提升到当前的作用域的最前面,不提升赋值操作
函数预解析--函数提升,就是把所有的函数声明提升到当前作用域的最前面,不调用函数.
尤其注意 两种函数声明方式在预解析中的不同
# 两种不同的函数声明方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <script> // 函数的 2 中声明方式 // 1 . 利用函数关键字自定义函数(命名函数) function fn() { } fn(); // 2 . 函数表达式(匿名函数) // var 变量名 = function() {}; var fun = function(aru) { console.log( '我是函数表达式' ); console.log(aru); } fun( '老师' ); // ( 1 ) fun是变量名 不是函数名 // ( 2 ) 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值 而 函数表达式里面存的是函数 // ( 3 ) 函数表达式也可以进行传递参数 </script> |
# 函数预解析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | <script> // 1 问 console.log(num); // 2 问 console.log(num); // undefined 坑 1 var num = 10 ; // 相当于执行了以下代码 // var num; // console.log(num); // num = 10 ; // 3 问 function fn() { console.log( 11 ); } fn(); // 4 问 fun(); // 报错 坑 2 var fun = function() { console.log( 22 ); } // 函数表达式 调用必须写在函数表达式的下面 // 相当于执行了以下代码 // var fun; 变量提升,因为此时是变量代表函数 // fun(); // fun = function() { // console.log( 22 ); // } // 1 . 我们js引擎运行js 分为两步: 预解析 代码执行 // ( 1 ). 预解析 js引擎会把js 里面所有的 var 还有 function 提升到当前作用域的最前面 // ( 2 ). 代码执行 按照代码书写的顺序从上往下执行 // 2 . 预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升) // ( 1 ) 变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作 // ( 2 ) 函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数 </script> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通