JS的运行

2021/12/14 6:17:08

本文主要是介绍JS的运行,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

执行环境、上下文、闭包或块与块级作用域

  • 语句执行的意义

    1. 语句是命令,语句执行都最终会以一个完成状态来返回。
    • 完成状态有五种:normal、return、break 、continue、throw。
      • 中断类型
        • break; 中断当前语句,将执行逻辑交到下一语句。应用于循环/switch语句中
        • break labelName; 中断“任意的标签化语句”,应用于块中
      • break语句的返回值的两个特性:类型必然是“break”;返回值必然是“空(Empty);
      • x break x;
    1. JavaScript 是一门混合了函数式与命令式范型的语言,而这里对函数和语句的不同处理,正是两种语言范型根本上的不同抽象模型带来的差异
  • 特殊的可执行结构-模板

  • 可执行结构
    模板;迭代器;赋值模板;指令
    归类于名字和值的绑定

  • 特殊的可执行的逻辑: 逐一匹配->把实参放在arguments列表中,然后让arguments中的值与参数表中的名字对应起来。

    • 箭头函数没有参数表?也采用与上述处理逻辑,只是在最后没有向闭包绑定arguments这个名字而已。
    • 所谓简单参数,就是可以在形参表中明确参数个数、没有扩展风格的参数表。
  • 扩展风格的参数表

  • 缺省参数,剩余参数,参数展开(依赖于迭代器)

  • 模板字面量
    ${1}是可执行结构的集大成者,
    它存储的是“结果”与“结果的计算过程”之间的关系,但是关注的是值,
    当它作为值来读取时,就会激活它的运算求值过程,并返回一个字符串值。

  • 函数的执行过程

    • 函数的一体两面
    • 用静态的视角来看,函数也无非就是“用三个语义组件构成的实体”: 参数+执行体+结果。
      函数既是可执行的逻辑,也同时是可被逻辑处理的数据。
      函数作为数据时,是“原始的函数声明”的一个实例,实例必须包括三个语义组件中的参数与执行体,创建了一个闭包作为结果。闭包(一个执行环境)是函数在运行期的一个实例。
  • 初始化参数(参数登记过程

  1. 简单参数x:“直接arguments绑定”. 只需要映射实参与参数对象(形参)两个数组的下标即可,
  2. “非简单参数”:“初始器赋值”. 通过名字来绑定索引值,因此一旦出现“重名参数”就无法处理了。
    初始器赋值时,无初值绑定,不可访问(类似于let变量
  • 传入参数
    执行于函数之外,例如f(a=100)
    函数参数与函数内变量同名,那么它们事实上将是同一个变量。
    对于简单参数x来说,没有“求值过程x=100”发生于函数的调用界面上
  • 绑定参数
    绑定参数的过程执行于函数(的闭包)之内,例如function foo(x=100)

(x = x) => x
三个 x 都是指向相同的变量,
函数在尝试执行“初始器赋值”时会访问第2个x,由于x是未赋值的,如同 let 变量一样不可访问,从而触发异常。
x => x
是一个最小化的函数。包括了一个函数完整的三个语法组件:参数、执行体和结果。
=两端是一个值操作,反映了“函数”的本质-“数据的转换”==> 所有的函数与表达式求值的本质-将数据x映射成x'

  • 递归”所理解的“函数调用自己”;迭代是“函数体”的重复执行

  • 次调用的多个结果值”。这才是展开语法被设计出来的原因。

  • 没有名字的函数在语言中的意义
    它既是逻辑,也是数据

    • 箭头函数并不绑定“this”和“arguments”
    • 匿名函数或简头函数赋给一个变量作为函数名时,该函数名不会绑定给环境,只出现在它的属性中f.name。


这篇关于JS的运行的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程