js 中函数执行过程

6/24/2020 Javascript
  1. 确定this的值 (确切的来说,this 在 JS 里面不是一个变量名而是一个关键字)

  2. 创建一个新的作用域

  3. 处理形参/实参(没有定义过才声明,无论如何都重新赋值(可能存在变量提升,提升的变量在这时候赋值),没有对应实参则赋值为undefined):

    • 对于每一个传入的实参,按照从左往右的顺序依次执行:如果对应的形参在本作用域中还没有定义,则在本作用域中声明形参,并赋值。
    • 如果已经定义过了,则重新给其赋值。(没有对应实参则赋值为"undefined")(没有定义:就是“没有声明”的意思)
  4. 处理函数定义(没有定义过才声明,无论如何都重新赋值):

    • 对该函数中所有的定义的函数,按照代码写的顺序依次执行
    • 如果这个变量名在本作用域中还没有定义,则在本作用域中声明这个函数名,并且赋值为对应的函数
    • 如果定义了这个变量,在可写的情况下重新给这个变量赋值为这个函数,否则抛出异常。
  5. 处理 arguments(没有定义过才声明和赋值):

    • 如果在本作用域中没有定义 arguments,则在本作用域中声明 arguments 并给其赋值。
  6. 处理变量声明(没有定义过才声明,不赋值):

    • 对于所有变量声明,按照代码写的顺序依次执行:如果在本作用域中没有定义这个变量,则在本作用域中声明这个变量,赋值为 undefined
  7. 然后执行函数代码。(当然是去变量定义里面的 var 执行)

Last Updated: 5/9/2021, 10:45:03 PM