普通函数
- 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(); // 普通函数执行