函数执行过程

95 阅读1分钟

普通函数

  • 1、形成一个私有的作用域
  • 2、形参赋值
  • 3、变量提升
  • 4、代码自上而下执行
  • 5、栈内存释放或者不释放

构造函数

  • 1、形成一个私有的作用域
  • 2、形参赋值
  • 3、变量提升
  • 4、在js代码自上而下执行之前,首先在当前的私有栈中创建一个对象(创建一个堆内存:暂时不存储任何的东西,并且让函数中的执行主体this指向这个新的堆内存:this +== 创建的对象)【构造函数执行独有】
  • 5、代码自上而下执行
  • 6、代码执行完成,把之前创建的堆内存地址返回(浏览器默认返回)

构造函数中的一些细节问题

构造函数执行,不写return,浏览器会默认返回创建的实例,但是如果自己写了return:

  • 1、return的是一个基本类型值,返回的结果依然是类的实例,没有受到影响;
  • 2、如果返回的是引用类型的值,则会把默认返回的实例覆盖,此时接收到的结果就不再是当前类的实例
  • 3、如果只写return;这样只是结束代码执行的作用,不会覆盖返回的实例

构造函数执行的时候,尽量减少return的使用,防止覆盖实例

function Fn() {
    var n = 10;
    return; // 只是结束代码执行,不会覆盖返回的实例
}

new Fn(); // 构造函数执行
new Fn; // 还是构造函数执行
Fn(); // 普通函数执行