你可能需要知道的前端小知识——JavaScript语句执行

·  阅读 330
  • 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

  • 回顾:

    • JavaScript函数的执行
    • JavaScript的执行

JavaScript语句执行的基本类型

Completion Record

  • [[Type]]:完成的类型,包括normalbreakcontinuereturnthrow
  • [[Value]]:语句产生的返回值,取值为基础类型值或者空
  • [[Target]]:语句的目标,是标签的字符串或者空

语句分类

普通语句(这里忽略var和函数声明的预处理机制)

  • 不带控制能力
  • 没有分支和重复执行的逻辑
  • 执行后会得到[[Type]]normalCompletion RecordJavaScript引擎在遇到这样的Completion Record,会继续执行下一条语句
  • 这些语句也会产生[[Value]],从引擎控制的角度,这些值没有什么用
空语句
  • :语言设计完备性
with语句
  • 严格模式禁止使用
  • 对象的属性在语句内部变成变量,容易造成语义不明
debugger语句
- 通知调试器在此断点,没有调试器挂载时,不产生任何是效果
复制代码
声明语句
  • var语句
    • 作用域是函数执行的作用域
    • 会穿透iffor
    • 在没有let的时候,使用立即执行函数(时代的眼泪)
    • 在大多数情况下,用letconst是比var更好的选择
  • let语句
    • 块级作用域
    • foriftry/catch等语句内使用let会产生块级作用域
  • const语句
    • 块级作用域
    • forif等语句内使用
  • class语句
    • class关键字
    • 块级作用域
    • 内部函数都是严格模式
  • 函数声明语句
    • function关键字

控制语句

  • if语句
  • switch语句
    • C中,Switch生成的额汇编代码性能略优于if else,但是在JavaScript中,没有本质区别
  • 循环语句
  • return语句
  • break语句和continue语句
  • try语句和throw语句

语句块

  • 复合结构,可以嵌套
  • 可以产生作用域
  • 语句块的[[Type]]根据内部语句来决定

总结

  • 通过对JavaScript语句的分类以及执行的类型的了解,可以更好的理解作用域
  • 欢迎留言评论
分类:
前端
分类:
前端