-
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
-
回顾:
JavaScript函数的执行JavaScript的执行
JavaScript语句执行的基本类型
Completion Record
[[Type]]:完成的类型,包括normal、break、continue、return、throw[[Value]]:语句产生的返回值,取值为基础类型值或者空[[Target]]:语句的目标,是标签的字符串或者空
语句分类
普通语句(这里忽略var和函数声明的预处理机制)
- 不带控制能力
- 没有分支和重复执行的逻辑
- 执行后会得到
[[Type]]为normal的Completion Record,JavaScript引擎在遇到这样的Completion Record,会继续执行下一条语句 - 这些语句也会产生
[[Value]],从引擎控制的角度,这些值没有什么用
空语句
;:语言设计完备性
with语句
- 严格模式禁止使用
- 对象的属性在语句内部变成变量,容易造成语义不明
debugger语句
- 通知调试器在此断点,没有调试器挂载时,不产生任何是效果
声明语句
var语句- 作用域是函数执行的作用域
- 会穿透
if、for - 在没有
let的时候,使用立即执行函数(时代的眼泪) - 在大多数情况下,用
let和const是比var更好的选择
let语句- 块级作用域
for、if、try/catch等语句内使用let会产生块级作用域
const语句- 块级作用域
for、if等语句内使用
class语句class关键字- 块级作用域
- 内部函数都是严格模式
- 函数声明语句
function关键字
控制语句
if语句switch语句- C中,Switch生成的额汇编代码性能略优于if else,但是在JavaScript中,没有本质区别
- 循环语句
return语句break语句和continue语句try语句和throw语句
语句块
- 复合结构,可以嵌套
- 可以产生作用域
- 语句块的
[[Type]]根据内部语句来决定
总结
- 通过对
JavaScript语句的分类以及执行的类型的了解,可以更好的理解作用域 - 欢迎留言评论