函数数据类型:
1.普通函数

  1. 类(内置类&自定义类)

对象数据类型:

  1. {}普通对象 [] 数组对象 /^$/正则对象 日期对象 Math函数对象 arguments类数组对象

    1. HTMLCollection/NodeList元素或者节点集合类数组对象...
  2. 实例是对象数据类型

  3. 类的prototype是对象数据类型(Function.prototype除外,它是一个匿名空函数)
  4. 函数是对象

    函数的三种角色

  5. 普通函数

    1. 形参、实参、ARGUMENTSRETURN、箭头函数
    2. 私有作用域(栈内存、执行上下文)
    3. 形参赋值 & 变量提升
    4. 作用域链
    5. 栈内存的释放和不释放(闭包)

    2.构造函数(类)

  1. + 类和实例
  2. + prototype __proto__ 原型和原型链
  3. + instanceof
  4. + constructor
  5. + hasOwnProperty
  6. + ...
  1. 普通对象
  1. + 它是由键值对组成的
  2. + ..
  1. function Fn(n, m) {
  2. this.x = n + m;
  3. this.y = n - m;
  4. let total = n * m;
  5. return total;
  6. }
  7. Fn.prototype.say = function () {
  8. console.log('SAY');
  9. }
  10. //=>普通函数
  11. let total = Fn(20, 10);
  12. //=>构造函数(类和实例)
  13. let f = new Fn(20, 10);
  14. //=>普通对象
  15. Fn.total = 1000;
  1. function Foo() {
  2. getName = function () {
  3. console.log(1);
  4. };
  5. return this;
  6. }
  7. Foo.getName = function () {
  8. console.log(2);
  9. };
  10. Foo.prototype.getName = function () {
  11. console.log(3);
  12. };
  13. var getName = function () {
  14. console.log(4);
  15. };
  16. function getName() {
  17. console.log(5);
  18. }
  19. Foo.getName();
  20. getName();
  21. Foo().getName();
  22. getName();
  23. new Foo.getName(); //=>Foo.getName:输出2这个方法(AF2) =>new AF2()
  24. new Foo().getName();
  25. new new Foo().getName();