在JavaScript中,... 常被称为扩展运算符或展开运算符,但 ...x 不返回值或引用,也就并不是表达式;另外 ...x 也不返回空或结果,并且可以作为操作数,也就并不是语句;实际上,... 是展开语法,在语义上用来展开一个可迭代的对象。 在 ...x 中,x 是可迭代对象,并且会通过一个迭代变量来管理其迭代过程。
参考:展开语法 - JavaScript | MDN (mozilla.org)
而迭代过程,并不是一个语法执行的过程,可以理解为一组函数执行的过程。其结束行为也就可以理解为函数内的异常或退出。迭代过程中,退出 (return)是执行过程的,而异常 (throw)是外部的。而迭代对象 x 的生存周期是由使用它的表达式、语句或语法来管理的,包括在必要的时候通过迭代变量来向内通知 return / throw 事件。
展开语法 … 没有向内通知的能力。而 for / of 语句可以隐式地向内通知。在 for / of 语句中,break、continue 和循环的正常退出都能够通知 return 事件,但因为 for / of 语句本身并不捕获和处理 throw 事件,所以它没有内向通知 throw 事件的能力。
----- 极客时间《JavaScript 核心原理解析》学习笔记 Day 9 -----